diff --git a/controllers/story.js b/controllers/story.js
index 3a34c7b883..a828f70d05 100755
--- a/controllers/story.js
+++ b/controllers/story.js
@@ -330,8 +330,8 @@ exports.storySubmission = function(req, res, next) {
return next(new Error('Not authorized'));
}
var storyLink = data.headline
- .replace(/\s+/g, ' ')
.replace(/[^a-z0-9\s]/gi, '')
+ .replace(/\s+/g, ' ')
.toLowerCase()
.trim();
var link = data.link;
@@ -389,7 +389,7 @@ exports.storySubmission = function(req, res, next) {
}
});
res.send(JSON.stringify({
- storyLink: story.storyLink.replace(/\s/g, '-').toLowerCase()
+ storyLink: story.storyLink.replace(/\s+/g, '-').toLowerCase()
}));
});
});
diff --git a/models/FieldGuide.js b/models/FieldGuide.js
index b705f44774..b9c2613eed 100644
--- a/models/FieldGuide.js
+++ b/models/FieldGuide.js
@@ -6,6 +6,10 @@ var fieldGuideSchema = new mongoose.Schema({
type: String,
unique: false
},
+ dashedName: {
+ type: String,
+ unique: false
+ },
description: {
type: Array,
unique: false
diff --git a/seed_data/challenges/basic-bonfires.json b/seed_data/challenges/basic-bonfires.json
index 002f2221d8..94fd787a39 100644
--- a/seed_data/challenges/basic-bonfires.json
+++ b/seed_data/challenges/basic-bonfires.json
@@ -530,7 +530,7 @@
"expect(mutation(['floor', 'for'])).to.be.true;"
],
"MDNlinks": [
- "Array.sort()"
+ "Array.indexOf()"
],
"challengeType": 5,
"nameCn": "",
@@ -1470,4 +1470,4 @@
"descriptionPt": []
}
]
-}
\ No newline at end of file
+}
diff --git a/seed_data/challenges/basic-html5-and-css.json b/seed_data/challenges/basic-html5-and-css.json
index 46d95747a2..1f22850de3 100644
--- a/seed_data/challenges/basic-html5-and-css.json
+++ b/seed_data/challenges/basic-html5-and-css.json
@@ -53,7 +53,7 @@
],
"tests": [
"assert(($('h2').length > 0), 'Create an h2
element.')",
- "assert(editor.match(/<\\/h2>/g) && editor.match(/<\\/h2>/g).length === editor.match(/
h2
element has a closing tag.')",
+ "assert(editor.match(/<\\/h2>/g) && editor.match(/<\\/h2>/g).length === editor.match(/h2
element has a closing tag.')",
"assert.isTrue((/cat(\\s)?photo(\\s)?app/gi).test($('h2').text()), 'Your h2
element should have the text \"CatPhotoApp\"')",
"assert.isTrue((/hello(\\s)+world/gi).test($('h1').text()), 'Your h1
element should have the text \"Hello World\"')"
],
@@ -89,7 +89,7 @@
"tests": [
"assert(($('p').length > 0), 'Create a p
element.')",
"assert.isTrue((/hello(\\s)+paragraph/gi).test($('p').text()), 'Your p
element should have the text \"Hello Paragraph\".')",
- "assert(new RegExp('', 'gi').test(editor), 'Be sure to complete your p
element with a closing tag.')"
+ "assert(editor.match(/<\\/p>/g) && editor.match(/<\\/p>/g).length === editor.match(//g).length, 'Make sureyour p
element has a closing tag.')"
],
"challengeSeed": [
"
p
elements with Kitty Ipsum text.')",
- "assert(editor.match(/<\\/p>/g).length > 1, 'Be sure that each of your p
elements has a closing tag.')",
+ "assert(editor.match(/<\\/p>/g).length > 1, 'Make sureeach of your p
elements has a closing tag.')",
"assert($('p').css('font-size') === '16px', 'Give your p
elements the font-size of 16px.')"
],
"challengeSeed": [
@@ -513,7 +513,7 @@
"description": [
"Make all of your p
elements use the \"Monospace\" font.",
"You can set an element's font by using the \"font-family\" attribute.",
- "For example, if you wanted to set your h2
element's font to \"Sans-serif\", you would use the following CSS: h2 { font-family: 'Sans-serif'; }
"
+ "For example, if you wanted to set your h2
element's font to \"Sans-serif\", you would use the following CSS: h2 { font-family: Sans-serif; }
"
],
"tests": [
"assert($('p').css('font-family').match(/monospace/i), 'Your p
elements should use the font \"Monospace\".')"
@@ -645,7 +645,7 @@
"name": "Waypoint: Override Styles with Important",
"difficulty": 0.025,
"description": [
- "Create a \"blue-text\" class that gives an element the font-color of blue. Also create an \"urgently-red\" class that gives an element the font-color of red, but add !important
to the class to ensure the element is rendered as being red. Apply both classes to your h2
element.",
+ "Create an \"urgently-red\" class that gives an element the font-color of red, but add !important
to the class to ensure the element is rendered as being red. Immediately below your \"urgently-red\" class declaration, create a \"blue-text\" class that gives an element the font-color of blue. Apply both classes to your h2
element.",
"You can add more than one class to an element by separating the class declarations with a space, like this: <h2 class='green-text giant-text'>This will be giant green text</h2>
.",
"Sometimes HTML elements will receive conflicting information from CSS classes as to how they should be styled.",
"If there's a conflict in the CSS, the browser will use whichever style declaration is closest to the bottom of the CSS document (whichever declaration comes last). Note that in-line style declarations are the final authority in how an HTML element will be rendered.",
@@ -1039,9 +1039,9 @@
"tests": [
"assert($('a').attr('href').match(/catphotoapp.com/gi).length > 0, 'You need an a
element that links to \"catphotoapp.com\".')",
"assert($('a').text().match(/cat\\sphotos/gi).length > 0, 'Your a
element should have the anchor text of \"cat photos\"')",
- "assert($('a').parent().is('p'), 'Your anchor element should be wrapped within a paragraph element.')",
+ "assert($('a[href=\\'http://www.catphotoapp.com\\']').parent().is('p'), 'Your anchor element should be wrapped within a paragraph element.')",
"assert($('p').text().match(/click\\shere\\sfor/gi), 'Your p
element should have the text \"click here for\".')",
- "assert(editor.match(/<\\/p>/g).length > 2, 'Be sure that each of your p
elements has a closing tag.')"
+ "assert(editor.match(/<\\/p>/g).length > 2, 'Make sureeach of your p
elements has a closing tag.')"
],
"challengeSeed": [
"",
@@ -1168,7 +1168,7 @@
"tests": [
"assert(new RegExp('#').test($('a').children('img').parent().attr('href')), 'Your anchor
element should be a dead link with a href
attribute set to \"#\".')",
"assert($('a').children('img').length > 0, 'Wrap your image element inside an anchor element.')",
- "assert(editor.match(/<\\/a>/g).length > 1, 'Be sure that each of your a
elements has a closing tag.')"
+ "assert(editor.match(/<\\/a>/g).length > 1, 'Make sureeach of your a
elements has a closing tag.')"
],
"challengeSeed": [
"",
@@ -1295,8 +1295,8 @@
"tests": [
"assert($('ul').length > 0, 'Create a ul
element.')",
"assert($('li').length > 2, 'Add three li
elements to your ul
element.')",
- "assert(editor.match(/<\\/ul>/g), 'Be sure that your ul
element has a closing tag.')",
- "assert(editor.match(/<\\/li>/g) && editor.match(/<\\/li>/g).length > 2, 'Be sure that each of your li
elements has a closing tag.')"
+ "assert(editor.match(/<\\/ul>/g), 'Make sureyour ul
element has a closing tag.')",
+ "assert(editor.match(/<\\/li>/g) && editor.match(/<\\/li>/g).length > 2, 'Make sureeach of your li
elements has a closing tag.')"
],
"challengeSeed": [
"",
@@ -1362,9 +1362,9 @@
"assert($('ol').length > 0, 'You should have an ol
element on your webpage.')",
"assert($('li').length > 5, 'You should have three li
elements within your ul
element.')",
"assert($('li').length > 5, 'You should have three li
elements within your ol
element.')",
- "assert(editor.match(/<\\/ol>/g), 'Be sure that your ol
element has a closing tag.')",
- "assert(editor.match(/<\\/ul>/g), 'Be sure that your ul
element has a closing tag.')",
- "assert(editor.match(/<\\/li>/g).length > 5, 'Be sure that each of your li
elements has a closing tag.')"
+ "assert(editor.match(/<\\/ol>/g), 'Make sureyour ol
element has a closing tag.')",
+ "assert(editor.match(/<\\/ul>/g), 'Make sureyour ul
element has a closing tag.')",
+ "assert(editor.match(/<\\/li>/g).length > 5, 'Make sureeach of your li
elements has a closing tag.')"
],
"challengeSeed": [
"",
@@ -1651,7 +1651,7 @@
"assert($('form').children('button').length > 0, 'Your form should have a button inside it.')",
"assert($('button').attr('type') === 'submit', 'Your submit button should have be of input type \"submit\".')",
"assert($('button').text().match(/submit/gi), 'Your submit button should have the text \"submit\".')",
- "assert(editor.match(/<\\/button>/g), 'Be sure that your button
element has a closing tag.')"
+ "assert(editor.match(/<\\/button>/g), 'Make sureyour button
element has a closing tag.')"
],
"challengeSeed": [
"",
@@ -2125,7 +2125,7 @@
"assert($('div').children('ol').length > 0, 'Wrap your ol
element inside your div
element.')",
"assert($('div').children('p').length > 1, 'Wrap your p
element inside your div
element.')",
"assert($('div').children('ul').length > 0, 'Wrap your ul
element inside your div
element.')",
- "assert(editor.match(/<\\/div>/g) && editor.match(/<\\/div>/g).length === editor.match(/div
element has a closing tag.')"
+ "assert(editor.match(/<\\/div>/g) && editor.match(/<\\/div>/g).length === editor.match(/div
element has a closing tag.')"
],
"challengeSeed": [
"",
@@ -2537,7 +2537,7 @@
},
{
"_id": "bad87fee1248bd9aedf08824",
- "name": "Waypoint: Add Different a Margin to Each Side of an Element",
+ "name": "Waypoint: Add Different Margins to Each Side of an Element",
"difficulty": 0.068,
"description": [
"Give the green box a margin of 40 pixels on its top and left side, but only 20 pixels on its bottom and right side.",
diff --git a/seed_data/challenges/bootstrap.json b/seed_data/challenges/bootstrap.json
index c20cf49429..fd4f7a8803 100644
--- a/seed_data/challenges/bootstrap.json
+++ b/seed_data/challenges/bootstrap.json
@@ -180,8 +180,8 @@
"Bootstrap has its own button styles, which look much better than the plain HTML ones."
],
"tests": [
- "assert($('.btn').length > 0, 'your new button should have the class \"btn\".');",
- "assert(new RegExp('like this photo','gi').test($('.btn').text()), 'your button should have the text \"like this photo\"');"
+ "assert($('button').hasClass('btn'), 'Your new button should have the class \"btn\".')",
+ "assert(new RegExp('like this photo','gi').test($('button.btn').text()), 'Your button should have the text \"like this photo\".')"
],
"challengeSeed": [
"",
@@ -260,11 +260,12 @@
"difficulty": 0.050,
"description": [
"Add Bootstrap's btn-block
class to your Bootstrap button.",
- "Normally, your buttons are only as wide as the text they contain. By making them block elements
, your button will stretch to fill your page's entire horizontal space.",
+ "Normally, your buttons are only as wide as the text they contain. By making them block
elements, your button will stretch to fill your page's entire horizontal space.",
"Note that these buttons still need the btn
class."
],
"tests": [
- "assert($('.btn-block').length > 0, 'your new button should have the class \"btn-block\".')"
+ "assert($('button').hasClass('btn'), 'Your button should still have the class \"btn\".')",
+ "assert($('button').hasClass('btn-block'), 'Your button should have the class \"btn-block\".')"
],
"challengeSeed": [
"",
@@ -348,8 +349,8 @@
"Note that this button will still need the btn
class."
],
"tests": [
- "assert($('.btn-primary').length > 0, 'Your new button should have the class \"btn-primary\".')",
- "assert($('.btn').length > 0, 'Your new button should have the class \"btn\".')"
+ "assert($('button').hasClass('btn-primary'), 'Your button should have the class \"btn-primary\".')",
+ "assert($('button').hasClass('btn-block') && $('button').hasClass('btn'), 'Your button should still have the \"btn\" and \"btn-block\" classes.')"
],
"challengeSeed": [
"",
@@ -428,13 +429,14 @@
"name": "Waypoint: Call out Optional Actions with Button Info",
"difficulty": 0.052,
"description": [
- "Create a new block-level Bootstrap button below your \"like\" button with the text \"Info\", and add Bootstrap's btn-info
and btn-block
classes to it.",
+ "Create a new block-level Bootstrap button below your \"Like\" button with the text \"Info\", and add Bootstrap's btn-info
and btn-block
classes to it.",
"Bootstrap comes with several pre-defined colors for buttons. The btn-info
class is used to call attention to optional actions that the user can take.",
"Note that these buttons still need the btn
and btn-block
classes."
],
"tests": [
- "assert($('.btn-info').length > 0, 'your new button should have the class \"btn-info\".')",
- "assert($('.btn-block').length > 1, 'Both of your Bootstrap buttons should have the class \"btn-block\".')"
+ "assert($('button').hasClass('btn-info'), 'Your new button should have the class \"btn-info\".')",
+ "assert($('button.btn-block.btn').length > 1, 'Both of your Bootstrap buttons should have the \"btn\" and \"btn-block\" classes.')",
+ "assert(new RegExp('info', 'gi').test($('button.btn-info').text()), 'Your new button should have the text \"Info\".')"
],
"challengeSeed": [
"",
@@ -513,13 +515,14 @@
"name": "Waypoint: Warn your Users of a Dangerous Action",
"difficulty": 0.053,
"description": [
- "Create a button with the text \"delete\" and give it the class btn-danger
.",
+ "Create a button with the text \"Delete\" and give it the class btn-danger
.",
"Bootstrap comes with several pre-defined colors for buttons. The btn-danger
class is the button color you'll use to notify users that the button performs a destructive action, such as deleting a cat photo.",
"Note that these buttons still need the btn
and btn-block
classes."
],
"tests": [
- "assert($('.btn-danger').length > 0, 'Your new button should have the class \"btn-danger\".')",
- "assert($('.btn-block').length > 1, 'Both of your Bootstrap buttons should have the class \"btn-block\".')"
+ "assert($('button').hasClass('btn-danger'), 'Your new button should have the class \"btn-danger\".')",
+ "assert($('button.btn-block.btn').length > 2, 'All of your Bootstrap buttons should have the \"btn\" and \"btn-block\" classes.')",
+ "assert(new RegExp('delete', 'gi').test($('button.btn-danger').text()), 'Your new button should have the text \"delete\".')"
],
"challengeSeed": [
"",
@@ -608,8 +611,8 @@
"The row
class is applied to a div
, and the buttons themselves can be wrapped within it."
],
"tests": [
- "assert($('.row').length > 0, 'Your new button should be wrapped within a div with the class \"row\".')",
- "assert($('.col-xs-4').length > 2, 'Each of your bootstrap buttons should be wrapped in a div with the class \"col-xs-4\".')"
+ "assert($('div.row:has(button)').length > 0, 'Your buttons should be wrapped within a div with the class \"row\".')",
+ "assert($('div.col-xs-4').length > 2, 'Each of your Bootstrap buttons should be wrapped in a div with the class \"col-xs-4\".')"
],
"challengeSeed": [
"",
@@ -698,7 +701,7 @@
"assert(!$('h2').hasClass('red-text'), 'You h2 element should no longer have the class \"red-text\".')",
"assert($('h2').hasClass('text-primary'), 'You h2 element should now have the class \"text-primary\".')",
"assert(!$('p').css('font-family').match(/monospace/i), 'Your paragraph elements should no longer use the font \"Monospace\".')",
- "assert($('.img-responsive').length > 1, 'Remove the \"smaller-image\" class from your top image and replace it with the \"img-responsive\" class.')"
+ "assert($('img').hasClass('img-responsive') && !$('img').hasClass('smaller-image'), 'Remove the \"smaller-image\" class from your top image and replace it with the \"img-responsive\" class.')"
],
"challengeSeed": [
"",
@@ -788,7 +791,7 @@
"name": "Waypoint: Create a Custom Heading",
"difficulty": 0.056,
"description": [
- "Wrap your first image and your h2 element within a single <div class='row'>
element. Wrap your h2 text within a <div class='col-xs-8'>
and your image in a <div class='col-xs-4'>
so that they are on the same line.",
+ "Wrap your first image and your h2
element within a single <div class='row'>
element. Wrap your h2
text within a <div class='col-xs-8'>
and your image in a <div class='col-xs-4'>
so that they are on the same line.",
"We will make a simple heading for our Cat Photo App by putting them in the same row.",
"Remember, Bootstrap uses a responsive grid system, which makes it easy to put elements into rows and specify each element's relative width. Most of Bootstrap's classes can be applied to a div
element.",
"Here's a diagram of how Bootstrap's 12-column grid layout works:",
@@ -798,9 +801,9 @@
"Notice how the image is now just the right size to fit along the text?"
],
"tests": [
- "assert($('.row').length > 1, 'Your h2 and top image elements should both be wrapped together within a div with the class \"row\".')",
- "assert($('.col-xs-4').length > 3, 'Wrap your top image inside a div with the class \"col-xs-4\".')",
- "assert($('.col-xs-8').length > 0, 'Wrap your h2 element inside a div with the class \"col-xs-8\".')"
+ "assert($('div.row:has(h2)').length > 0 && $('div.row:has(img)').length > 0, 'Your h2 and top image elements should both be wrapped together within a div with the class \"row\".')",
+ "assert($('div.col-xs-4:has(img)').length > 0, 'Wrap your top image inside a div with the class \"col-xs-4\".')",
+ "assert($('div.col-xs-8:has(h2)').length > 0, 'Wrap your h2 element inside a div with the class \"col-xs-8\".')"
],
"challengeSeed": [
"",
@@ -881,7 +884,7 @@
"Go ahead and add a <i class=\"fa fa-thumbs-up\"></i>
within your like button's element."
],
"tests": [
- "assert($('.fa-thumbs-up').length > 0, 'Add a i
element with the classes \"fa\" and \"fa-thumbs-up\".')",
+ "assert($('i').hasClass('fa fa-thumbs-up'), 'Add an i
element with the classes \"fa\" and \"fa-thumbs-up\".')",
"assert($('button').children('i').length > 0, 'Wrap your i
element within your button
element.')",
"assert(editor.match(/<\\/i>/g), 'Be sure to close your i
element with a closing tag.')"
],
@@ -968,8 +971,8 @@
"Add <i class=\"fa fa-info-circle\"></i>
within your info button's element, and a <i class=\"fa fa-trash\"></i>
within your delete button."
],
"tests": [
- "assert($('.fa-trash').length > 0, 'You should add a <i class=\"fa fa-trash\"></i>
within your delete button element.')",
- "assert($('.fa-info-circle').length > 0, 'You should add a <i class=\"fa fa-info-circle\"></i>
within your info button element.')"
+ "assert($('i').hasClass('fa fa-trash'), 'You should add a <i class=\"fa fa-trash\"></i>
within your delete button element.')",
+ "assert($('i').hasClass('fa fa-info-circle'), 'You should add a <i class=\"fa fa-info-circle\"></i>
within your info button element.')"
],
"challengeSeed": [
"",
@@ -1053,8 +1056,8 @@
"You can use Bootstrap's col-xs-*
classes on form elements, too! This way, our radio buttons will be evenly spread out across the page, regardless of how wide the screen resolution is."
],
"tests": [
- "assert($('.row').length > 2, 'Wrap your all of your radio buttons inside one div with the class \"row\".')",
- "assert($('.col-xs-6').length > 1, 'Wrap each of your radio buttons inside its own div with the class \"col-xs-6\".')"
+ "assert($('div.row:has(input[type=\\'radio\\'])').length > 0, 'Wrap all of your radio buttons inside one div with the class \"row\".')",
+ "assert($('div.col-xs-6:has(input[type=\\'radio\\'])').length > 1, 'Wrap each of your radio buttons inside its own div with the class \"col-xs-6\".')"
],
"challengeSeed": [
"",
@@ -1138,8 +1141,8 @@
"You can use Bootstrap's col-xs-*
classes on form elements, too! This way, our checkboxes will be evenly spread out across the page, regardless of how wide the screen resolution is."
],
"tests": [
- "assert($('.row').length > 3, 'Wrap your all of your checkboxes inside one div with the class \"row\".')",
- "assert($('.col-xs-4').length > 6, 'Wrap each of your checkboxes inside its own div with the class \"col-xs-4\".')"
+ "assert($('div.row:has(input[type=\\'checkbox\\'])').length > 0, 'Wrap all of your checkboxes inside one div with the class \"row\".')",
+ "assert($('div.col-xs-4:has(input[type=\\'checkbox\\'])').length > 2, 'Wrap each of your checkboxes inside its own div with the class \"col-xs-4\".')"
],
"challengeSeed": [
"",
@@ -1229,9 +1232,9 @@
"Give your form's text input field a class of form-control
. Give your form's submit button the classes btn btn-primary
and give it the Font Awesome icon of fa-paper-plane
."
],
"tests": [
- "assert($('.btn-primary').length > 1, 'Give the submit button in your form the classes \"btn btn-primary\".')",
- "assert($('.fa-paper-plane').length > 0, 'Add a <i class=\"fa fa-paper-plane\"></i>
within your submit button element.')",
- "assert($('.form-control').length > 0, 'Give the text input field in your form the class \"form-control\".')"
+ "assert($('button[type=\\'submit\\']').hasClass('btn btn-primary'), 'Give the submit button in your form the classes \"btn btn-primary\".')",
+ "assert($('button[type=\\'submit\\']:has(i.fa.fa-paper-plane)').length > 0, 'Add a <i class=\"fa fa-paper-plane\"></i>
within your submit button element.')",
+ "assert($('input[type=\\'text\\']').hasClass('form-control'), 'Give the text input field in your form the class \"form-control\".')"
],
"challengeSeed": [
"",
@@ -1332,9 +1335,9 @@
"This is the last challenge we'll do for our Cat Photo App for now. We hope you've enjoyed learning Font Awesome, Bootstrap, and responsive design!"
],
"tests": [
- "assert($('.row').length > 4, 'Wrap your form submission button and text area in a div with class \"row\".')",
- "assert($('.col-xs-5').length > 0, 'Wrap your form submission button in a div with the class \"col-xs-5\".')",
- "assert($('.col-xs-7').length > 0, 'Wrap your form text area in a div with the class \"col-xs-7\".')"
+ "assert($('div.row:has(input[type=\\'text\\'])').length > 0 && $('div.row:has(button[type=\\'submit\\'])').length > 0, 'Wrap your form submission button and text area in a div with class \"row\".')",
+ "assert($('div.col-xs-5:has(button[type=\\'submit\\'])').length > 0, 'Wrap your form submission button in a div with the class \"col-xs-5\".')",
+ "assert($('div.col-xs-7:has(input[type=\\'text\\'])').length > 0, 'Wrap your form text area in a div with the class \"col-xs-7\".')"
],
"challengeSeed": [
"",
diff --git a/seed_data/field-guides.json b/seed_data/field-guides.json
index b7d7a9567c..de6edba981 100644
--- a/seed_data/field-guides.json
+++ b/seed_data/field-guides.json
@@ -2,6 +2,7 @@
{
"_id": "bd7158d9c441eddfaeb5bdef",
"name": "How do I use this guide?",
+ "dashedName": "how-do-i-use-this-guide",
"description": [
"Like JavaScript, Ruby and Python are high-level scripting languages that can be used for full stack web development.
", @@ -189,6 +198,7 @@ { "_id": "bd7158d9c437eddfaeb5bdef", "name": "What is pair programming, and why is it special?", + "dashedName": "what-is-pair-programming-and-why-is-it-special", "description": [ "Building nonprofit projects is the main way that our campers learn full stack JavaScript and agile software development. Once you complete the Free Code Camp Waypoints, Bonfires, Ziplines and Basejumps, you'll begin this process.
", @@ -640,6 +662,7 @@ { "_id": "bd7158d9c447eddfaeb5bdef", "name": "How do I install Screenhero?", + "dashedName": "how-do-i-install-screenhero", "description": [ "Free Code Camp is committed to respecting the privacy of visitors to our web sites and web applications. The guidelines below explain how we protect the privacy of visitors to FreeCodeCamp.com and its features.
", @@ -751,6 +777,7 @@ { "_id": "bd7158d9c436eddfaeb5bd3c", "name": "How can I reach the Free Code Camp team to interview them for my publication?", + "dashedName": "how-can-i-reach-the-free-code-camp-team-to-interview-them-for-my-publication", "description": [ "Contributing to our field guide is a great way to establish your history on GitHub, add to your portfolio, and help other campers. If you have a question about JavaScript or programming in general that you'd like us to add to the field guide, here are two ways to get it into the guide:
", diff --git a/seed_data/storyCleanup.js b/seed_data/storyCleanup.js index c216e67293..2598526c8a 100644 --- a/seed_data/storyCleanup.js +++ b/seed_data/storyCleanup.js @@ -18,8 +18,8 @@ function storyLinkCleanup(cb) { console.log(i++); this.pause(); story.storyLink = story.storyLink. - replace(/\s+/g, ' '). replace(/[^a-z0-9\s]/gi, ''). + replace(/\s+/g, ' '). toLowerCase(). trim(); story.save(function (err) {