diff --git a/curriculum/.babelrc b/curriculum/.babelrc new file mode 100644 index 0000000000..ef7e3c0fbb --- /dev/null +++ b/curriculum/.babelrc @@ -0,0 +1,8 @@ +{ + "presets": [ "env", "react", "stage-0" ], + "plugins": [ + "transform-runtime", + "babel-plugin-add-module-exports", + "lodash" + ] +} diff --git a/curriculum/.editorconfig b/curriculum/.editorconfig new file mode 100644 index 0000000000..4a7ea3036a --- /dev/null +++ b/curriculum/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/curriculum/.eslintignore b/curriculum/.eslintignore new file mode 100644 index 0000000000..1512710787 --- /dev/null +++ b/curriculum/.eslintignore @@ -0,0 +1,2 @@ +node_modules +.webpack \ No newline at end of file diff --git a/curriculum/.eslintrc b/curriculum/.eslintrc new file mode 100644 index 0000000000..9624f04f54 --- /dev/null +++ b/curriculum/.eslintrc @@ -0,0 +1,3 @@ +{ + "extends": "freecodecamp" +} \ No newline at end of file diff --git a/curriculum/.github/CODE_OF_CONDUCT.md b/curriculum/.github/CODE_OF_CONDUCT.md new file mode 100644 index 0000000000..b4454e13ac --- /dev/null +++ b/curriculum/.github/CODE_OF_CONDUCT.md @@ -0,0 +1,74 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level of experience, +nationality, personal appearance, race, religion, or sexual identity and +orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or +advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at team@freecodecamp.org. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ diff --git a/curriculum/.github/ISSUE_TEMPLATE/bug_report.md b/curriculum/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000000..fe9830e88f --- /dev/null +++ b/curriculum/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,29 @@ +--- +name: Bug report +about: Report an issue or a bug after you have searched through existing issues + +--- + +#### Describe the bug +A clear and concise description of what the bug is. + +#### To Reproduce +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +#### Expected behavior +A clear and concise description of what you expected to happen. + +#### Screenshots +If applicable, add screenshots to help explain your problem. + +#### Desktop (please complete the following information): + - OS: [e.g. iOS] + - Browser [e.g. chrome, safari] + - Version [e.g. 22] + +#### Additional context +Add any other context about the problem here. diff --git a/curriculum/.github/ISSUE_TEMPLATE/feature_request.md b/curriculum/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000000..b7416aedd5 --- /dev/null +++ b/curriculum/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,17 @@ +--- +name: Feature request +about: Suggest a challenge or a feature for this project + +--- + +#### Is your feature request related to a problem? Please describe. +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +#### Describe the solution you'd like +A clear and concise description of what you want to happen. + +#### Describe alternatives you've considered +A clear and concise description of any alternative solutions or features you've considered. + +#### Additional context +Add any other context or screenshots about the feature request here. diff --git a/curriculum/.github/PULL_REQUEST_TEMPLATE.md b/curriculum/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000000..a30c23ddad --- /dev/null +++ b/curriculum/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,31 @@ +#### Description + + + + + + + +#### Pre-Submission Checklist + +- [ ] Your pull request targets the `dev` branch. +- [ ] Branch starts with either `fix/`, `feature/`, or `translate/` (e.g. `fix/challenge-tests`) +- [ ] All new and existing tests pass the command `npm test`. +- [ ] Use `npm run commit` to generate a conventional commit message. + Learn more here: +- [ ] The changes were done locally on your machine and NOT GitHub web interface. + If they were done on the web interface you have ensured that you are creating conventional commit messages. + +#### Checklist: + +- [ ] Tested changes locally. +- [ ] Addressed currently open issue (replace XXXXX with an issue no in next line) + +Closes #XXXXX + diff --git a/curriculum/.gitignore b/curriculum/.gitignore new file mode 100644 index 0000000000..bef690b591 --- /dev/null +++ b/curriculum/.gitignore @@ -0,0 +1,74 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Compiled distribution folder +dist/ + +# Dependency directories +node_modules/ +jspm_packages/ + +# Unpacked challenge files +unpacked/ + +# TypeScript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + +# next.js build output +.next + +# IDE +.idea +*.iml +.DS_Store +Thumbs.db +.vscode/ \ No newline at end of file diff --git a/curriculum/.npmignore b/curriculum/.npmignore new file mode 100644 index 0000000000..5bcece0a46 --- /dev/null +++ b/curriculum/.npmignore @@ -0,0 +1,3 @@ +* +!dist/*.js +!dist/challenges/**/*.json \ No newline at end of file diff --git a/curriculum/.prettierrc b/curriculum/.prettierrc new file mode 100644 index 0000000000..e54db678ea --- /dev/null +++ b/curriculum/.prettierrc @@ -0,0 +1,5 @@ +{ + "semi": true, + "singleQuote": true, + "trailingComma": "none" +} \ No newline at end of file diff --git a/curriculum/.travis.yml b/curriculum/.travis.yml new file mode 100644 index 0000000000..4dfccd6bf8 --- /dev/null +++ b/curriculum/.travis.yml @@ -0,0 +1,31 @@ +language: node_js + +node_js: + - 'lts/*' + +cache: + directories: + - ~/.npm + - node_modules + +notifications: + email: + on_success: change + on_failure: always + +script: + - commitlint-travis + - npm run lint + - npm run test + +deploy: + provider: script + skip_cleanup: true + script: + - npx semantic-release + +branches: + except: + - /^v\d+\.\d+\.\d+$/ + +sudo: false \ No newline at end of file diff --git a/curriculum/CHANGELOG.md b/curriculum/CHANGELOG.md new file mode 100644 index 0000000000..5c903d6491 --- /dev/null +++ b/curriculum/CHANGELOG.md @@ -0,0 +1,221 @@ +## [3.2.1](https://github.com/freeCodeCamp/curriculum/compare/v3.2.0...v3.2.1) (2018-09-25) + + +### Bug Fixes + +* Add videoUrl field ([#298](https://github.com/freeCodeCamp/curriculum/issues/298)) ([ce3cc22](https://github.com/freeCodeCamp/curriculum/commit/ce3cc22)) + +# [3.2.0](https://github.com/freeCodeCamp/curriculum/compare/v3.1.2...v3.2.0) (2018-09-20) + + +### Bug Fixes + +* **challenges:** a sentence didn't make sense, so I modified it ([3d77920](https://github.com/freeCodeCamp/curriculum/commit/3d77920)), closes [#18046](https://github.com/freeCodeCamp/curriculum/issues/18046) +* **challenges:** add missing test to check for for css class ([6e42f53](https://github.com/freeCodeCamp/curriculum/commit/6e42f53)), closes [#254](https://github.com/freeCodeCamp/curriculum/issues/254) +* **challenges:** add note at bottom of description in d3 challenge ([c60d332](https://github.com/freeCodeCamp/curriculum/commit/c60d332)), closes [#17767](https://github.com/freeCodeCamp/curriculum/issues/17767) +* **challenges:** add solution, test to project euler problems ([f572324](https://github.com/freeCodeCamp/curriculum/commit/f572324)) +* **challenges:** add solutions to first 3 debugging challenges ([c2e5794](https://github.com/freeCodeCamp/curriculum/commit/c2e5794)) +* **challenges:** add test to check user is using \W in Regex ([296cf44](https://github.com/freeCodeCamp/curriculum/commit/296cf44)) +* **challenges:** add test to lookahead regex challenge ([e044de4](https://github.com/freeCodeCamp/curriculum/commit/e044de4)), closes [#209](https://github.com/freeCodeCamp/curriculum/issues/209) +* **challenges:** added code tags ([065036b](https://github.com/freeCodeCamp/curriculum/commit/065036b)), closes [#18054](https://github.com/freeCodeCamp/curriculum/issues/18054) +* **challenges:** added solutions to project euler problems 28, 31 ([5e12499](https://github.com/freeCodeCamp/curriculum/commit/5e12499)) +* **challenges:** adding code tags to description ([57d5b55](https://github.com/freeCodeCamp/curriculum/commit/57d5b55)), closes [#17911](https://github.com/freeCodeCamp/curriculum/issues/17911) +* **challenges:** adding negative integer to challenge to improve tests ([#211](https://github.com/freeCodeCamp/curriculum/issues/211)) ([2adc516](https://github.com/freeCodeCamp/curriculum/commit/2adc516)) +* **challenges:** allow user to comment out undesired code ([72c2407](https://github.com/freeCodeCamp/curriculum/commit/72c2407)) +* **challenges:** challenge description is formatted and concised ([dcd8e45](https://github.com/freeCodeCamp/curriculum/commit/dcd8e45)) +* **challenges:** change challengeType to fix help button ([ddcc661](https://github.com/freeCodeCamp/curriculum/commit/ddcc661)) +* **challenges:** change definition of complementary colors ([#299](https://github.com/freeCodeCamp/curriculum/issues/299)) ([c022dff](https://github.com/freeCodeCamp/curriculum/commit/c022dff)) +* **challenges:** check for shorthand character in regex ([#238](https://github.com/freeCodeCamp/curriculum/issues/238)) ([0bf8d32](https://github.com/freeCodeCamp/curriculum/commit/0bf8d32)) +* **challenges:** commented output was wrong ([3cb972e](https://github.com/freeCodeCamp/curriculum/commit/3cb972e)) +* **challenges:** converts delete html test to regex ([d80d98d](https://github.com/freeCodeCamp/curriculum/commit/d80d98d)), closes [#251](https://github.com/freeCodeCamp/curriculum/issues/251) +* **challenges:** corrected challenge instructions ([159203a](https://github.com/freeCodeCamp/curriculum/commit/159203a)) +* **challenges:** fix [#17155](https://github.com/freeCodeCamp/curriculum/issues/17155) ([cb21e59](https://github.com/freeCodeCamp/curriculum/commit/cb21e59)) +* **challenges:** fix confusing destructuring es6 challenge ([1a4f6a8](https://github.com/freeCodeCamp/curriculum/commit/1a4f6a8)), closes [#213](https://github.com/freeCodeCamp/curriculum/issues/213) +* **challenges:** fix description in css variable fallback challenge ([bc33a03](https://github.com/freeCodeCamp/curriculum/commit/bc33a03)), closes [freeCodeCamp/freeCodeCamp#17546](https://github.com/freeCodeCamp/freeCodeCamp/issues/17546) +* **challenges:** fix flex direction row regex ([25ea07e](https://github.com/freeCodeCamp/curriculum/commit/25ea07e)), closes [#260](https://github.com/freeCodeCamp/curriculum/issues/260) +* **challenges:** fix grammar and spelling errors ([#244](https://github.com/freeCodeCamp/curriculum/issues/244)) ([b0c0b74](https://github.com/freeCodeCamp/curriculum/commit/b0c0b74)) +* **challenges:** fix grid-gap shorthand regex ([#232](https://github.com/freeCodeCamp/curriculum/issues/232)) ([a49f45e](https://github.com/freeCodeCamp/curriculum/commit/a49f45e)), closes [#229](https://github.com/freeCodeCamp/curriculum/issues/229) +* **challenges:** fix grid-gap shorthand regex ([#237](https://github.com/freeCodeCamp/curriculum/issues/237)) ([b369fa0](https://github.com/freeCodeCamp/curriculum/commit/b369fa0)), closes [#229](https://github.com/freeCodeCamp/curriculum/issues/229) +* **challenges:** fix regex in a JS challenge ([#257](https://github.com/freeCodeCamp/curriculum/issues/257)) ([6058da3](https://github.com/freeCodeCamp/curriculum/commit/6058da3)) +* **challenges:** fix typo in wrap-reverse description ([434ea5c](https://github.com/freeCodeCamp/curriculum/commit/434ea5c)) +* **challenges:** fixed challenge accepted without any new code ([96b39c1](https://github.com/freeCodeCamp/curriculum/commit/96b39c1)), closes [#198](https://github.com/freeCodeCamp/curriculum/issues/198) +* **challenges:** fixed esc chars in managing packages with npm lesson ([6335a15](https://github.com/freeCodeCamp/curriculum/commit/6335a15)) +* **challenges:** fixed tests to check for pre operators ([ded4705](https://github.com/freeCodeCamp/curriculum/commit/ded4705)), closes [#199](https://github.com/freeCodeCamp/curriculum/issues/199) +* **challenges:** fixed typo in algorithms and ds ([31957a4](https://github.com/freeCodeCamp/curriculum/commit/31957a4)) +* **challenges:** Incorrect html closing tag ([a1464f0](https://github.com/freeCodeCamp/curriculum/commit/a1464f0)) +* **challenges:** insufficient objectives for javascript_algorithm/es6/19 ([7707b18](https://github.com/freeCodeCamp/curriculum/commit/7707b18)) +* **challenges:** missing space in code example ([c50cc4e](https://github.com/freeCodeCamp/curriculum/commit/c50cc4e)) +* **challenges:** remove race condition from react lifecycle challenge ([a20ac56](https://github.com/freeCodeCamp/curriculum/commit/a20ac56)) +* **challenges:** removed duplicate css top property ([0a79c58](https://github.com/freeCodeCamp/curriculum/commit/0a79c58)) +* **challenges:** rephrased wording in applied visual design ([#268](https://github.com/freeCodeCamp/curriculum/issues/268)) ([d560d58](https://github.com/freeCodeCamp/curriculum/commit/d560d58)) +* **challenges:** replaced em tags with code tags ([68daaf7](https://github.com/freeCodeCamp/curriculum/commit/68daaf7)), closes [#18048](https://github.com/freeCodeCamp/curriculum/issues/18048) +* **challenges:** reword test text and improve test accuracy ([f834a98](https://github.com/freeCodeCamp/curriculum/commit/f834a98)) +* **challenges:** small edit to correct sematic issues ([322bf80](https://github.com/freeCodeCamp/curriculum/commit/322bf80)) +* clickjacking challenge description ([037990c](https://github.com/freeCodeCamp/curriculum/commit/037990c)) +* **challenges:** spelling and grammar errors addressed ([8f17adf](https://github.com/freeCodeCamp/curriculum/commit/8f17adf)) +* **challenges:** typo ([4f7faba](https://github.com/freeCodeCamp/curriculum/commit/4f7faba)) +* **challenges:** update test and add solution for DS challenge ([d1b2075](https://github.com/freeCodeCamp/curriculum/commit/d1b2075)), closes [#164](https://github.com/freeCodeCamp/curriculum/issues/164) +* **challenges:** Update test to include whitespace ([#272](https://github.com/freeCodeCamp/curriculum/issues/272)) ([77689f4](https://github.com/freeCodeCamp/curriculum/commit/77689f4)), closes [#271](https://github.com/freeCodeCamp/curriculum/issues/271) +* **schema:** change schema and unpack script ([b014b23](https://github.com/freeCodeCamp/curriculum/commit/b014b23)) + + +### Features + +* **challenges:** add browser fallback challenge ([b090e8b](https://github.com/freeCodeCamp/curriculum/commit/b090e8b)), closes [freeCodeCamp/freeCodeCamp#17546](https://github.com/freeCodeCamp/freeCodeCamp/issues/17546) + +## [3.1.2](https://github.com/freeCodeCamp/curriculum/compare/v3.1.1...v3.1.2) (2018-07-31) + + +### Bug Fixes + +* **challenges:** allow for omitted unit after zero values ([45b573b](https://github.com/freeCodeCamp/curriculum/commit/45b573b)), closes [#166](https://github.com/freeCodeCamp/curriculum/issues/166) +* **challenges:** changed complementary color for blue to orange ([e41f078](https://github.com/freeCodeCamp/curriculum/commit/e41f078)), closes [#17934](https://github.com/freeCodeCamp/curriculum/issues/17934) +* **challenges:** fix test in hr challenge ([#189](https://github.com/freeCodeCamp/curriculum/issues/189)) ([2edb306](https://github.com/freeCodeCamp/curriculum/commit/2edb306)) +* **challenges:** fix third test for template literals ([b8d004e](https://github.com/freeCodeCamp/curriculum/commit/b8d004e)), closes [#135](https://github.com/freeCodeCamp/curriculum/issues/135) +* **challenges:** fixes escaping of ([fd8c9e4](https://github.com/freeCodeCamp/curriculum/commit/fd8c9e4)) +* **scripts:** fix unpack and repack scripts for the new challenge schema ([52ed7cf](https://github.com/freeCodeCamp/curriculum/commit/52ed7cf)) + +## [3.1.1](https://github.com/freeCodeCamp/curriculum/compare/v3.1.0...v3.1.1) (2018-07-28) + + +### Bug Fixes + +* **challenges:** improve test for mongodb and mongoose ([8ae372a](https://github.com/freeCodeCamp/curriculum/commit/8ae372a)) + +# [3.1.0](https://github.com/freeCodeCamp/curriculum/compare/v3.0.1...v3.1.0) (2018-07-27) + + +### Bug Fixes + +* **challenge:** syntax error in sample code snippet ([1d3e076](https://github.com/freeCodeCamp/curriculum/commit/1d3e076)) +* **challenge:** typos in first Basic CSS challenge test ([5e41e74](https://github.com/freeCodeCamp/curriculum/commit/5e41e74)) +* **challenges:** add code input space for final d3 challenge ([f0b7ea9](https://github.com/freeCodeCamp/curriculum/commit/f0b7ea9)) +* **challenges:** add comments to getter/setter instructions codeblock ([9e9bc27](https://github.com/freeCodeCamp/curriculum/commit/9e9bc27)), closes [#92](https://github.com/freeCodeCamp/curriculum/issues/92) +* **challenges:** add solution project euler 52 ([f31fe38](https://github.com/freeCodeCamp/curriculum/commit/f31fe38)) +* **challenges:** add solution to project euler 53 ([56d7caf](https://github.com/freeCodeCamp/curriculum/commit/56d7caf)) +* **challenges:** add user story to tribute page challange ([12c78d4](https://github.com/freeCodeCamp/curriculum/commit/12c78d4)) +* **challenges:** allows single quotes ([57dab6d](https://github.com/freeCodeCamp/curriculum/commit/57dab6d)) +* **challenges:** broken link ([64b93df](https://github.com/freeCodeCamp/curriculum/commit/64b93df)) +* **challenges:** broken link ([de30ac8](https://github.com/freeCodeCamp/curriculum/commit/de30ac8)), closes [#17823](https://github.com/freeCodeCamp/curriculum/issues/17823) +* **challenges:** change del tag to s tag ([4dc7589](https://github.com/freeCodeCamp/curriculum/commit/4dc7589)) +* **challenges:** change green-box class margin to match red-box ([9fd5533](https://github.com/freeCodeCamp/curriculum/commit/9fd5533)), closes [#169](https://github.com/freeCodeCamp/curriculum/issues/169) +* **challenges:** change innerHTML to textContent ([#160](https://github.com/freeCodeCamp/curriculum/issues/160)) ([06e1ba1](https://github.com/freeCodeCamp/curriculum/commit/06e1ba1)), closes [freeCodeCamp/freeCodeCamp#17888](https://github.com/freeCodeCamp/freeCodeCamp/issues/17888) +* **challenges:** fix 2nd test bug ([362fc8a](https://github.com/freeCodeCamp/curriculum/commit/362fc8a)), closes [#17769](https://github.com/freeCodeCamp/curriculum/issues/17769) [#17039](https://github.com/freeCodeCamp/curriculum/issues/17039) [#16967](https://github.com/freeCodeCamp/curriculum/issues/16967) +* **challenges:** fix broken tests - es6_declarative_function ([667dba9](https://github.com/freeCodeCamp/curriculum/commit/667dba9)) +* **challenges:** fix challenge for fallback value of CSS variable ([3abf7ad](https://github.com/freeCodeCamp/curriculum/commit/3abf7ad)) +* **challenges:** fix description and tests to use sync hashing ([cfa99ef](https://github.com/freeCodeCamp/curriculum/commit/cfa99ef)), closes [#119](https://github.com/freeCodeCamp/curriculum/issues/119) +* **challenges:** fix initial contents ([9329543](https://github.com/freeCodeCamp/curriculum/commit/9329543)) +* **challenges:** fix regex (es6 : import vs require) ([f4d598f](https://github.com/freeCodeCamp/curriculum/commit/f4d598f)), closes [#108](https://github.com/freeCodeCamp/curriculum/issues/108) +* **challenges:** fix regex in applied visual design challenge ([#162](https://github.com/freeCodeCamp/curriculum/issues/162)) ([5a34767](https://github.com/freeCodeCamp/curriculum/commit/5a34767)), closes [#161](https://github.com/freeCodeCamp/curriculum/issues/161) [#161](https://github.com/freeCodeCamp/curriculum/issues/161) +* **challenges:** fix regex to allow redundant space characters ([8b99b8b](https://github.com/freeCodeCamp/curriculum/commit/8b99b8b)) +* **challenges:** fix typo in "split string into array using split" ([5b27dfd](https://github.com/freeCodeCamp/curriculum/commit/5b27dfd)) +* **challenges:** fix typo in a "mongodb and mongoose" challenge ([bd67a66](https://github.com/freeCodeCamp/curriculum/commit/bd67a66)) +* **challenges:** fix typo in a node and express challenge ([78d86a4](https://github.com/freeCodeCamp/curriculum/commit/78d86a4)) +* **challenges:** fix typo in findOneAndUpdate() challenge ([ab912e4](https://github.com/freeCodeCamp/curriculum/commit/ab912e4)) +* **challenges:** fix typo in node and express challenge ([7f3ed42](https://github.com/freeCodeCamp/curriculum/commit/7f3ed42)) +* **challenges:** fix typos ([82f85b0](https://github.com/freeCodeCamp/curriculum/commit/82f85b0)) +* **challenges:** fixed a typo in Data structures challege ([a4f810e](https://github.com/freeCodeCamp/curriculum/commit/a4f810e)), closes [freeCodeCamp/freeCodeCamp#17786](https://github.com/freeCodeCamp/freeCodeCamp/issues/17786) +* **challenges:** fixed RegEx for template literals javascript challenge ([66d8463](https://github.com/freeCodeCamp/curriculum/commit/66d8463)), closes [#65](https://github.com/freeCodeCamp/curriculum/issues/65) +* **challenges:** fixed regex in a challenge ([c28aac0](https://github.com/freeCodeCamp/curriculum/commit/c28aac0)), closes [freeCodeCamp/freeCodeCamp#17861](https://github.com/freeCodeCamp/freeCodeCamp/issues/17861) +* **challenges:** glitch links in backend projects now open in new tabs ([507c22d](https://github.com/freeCodeCamp/curriculum/commit/507c22d)), closes [#17799](https://github.com/freeCodeCamp/curriculum/issues/17799) +* **challenges:** grammatical error ([5308332](https://github.com/freeCodeCamp/curriculum/commit/5308332)) +* **challenges:** improve template literal challenge instructions ([99f4b9f](https://github.com/freeCodeCamp/curriculum/commit/99f4b9f)) +* **challenges:** inline style semicolon consistency ([3557016](https://github.com/freeCodeCamp/curriculum/commit/3557016)), closes [#17909](https://github.com/freeCodeCamp/curriculum/issues/17909) +* **challenges:** minor css grid typo ([f147430](https://github.com/freeCodeCamp/curriculum/commit/f147430)) +* **challenges:** moved the `` tag inside the `

` tag ([128794d](https://github.com/freeCodeCamp/curriculum/commit/128794d)) +* **challenges:** remove obsolete mention of beta and update link [#144](https://github.com/freeCodeCamp/curriculum/issues/144) ([59d98b8](https://github.com/freeCodeCamp/curriculum/commit/59d98b8)) +* **challenges:** replace assertions in authentication with socket.io ([20e3617](https://github.com/freeCodeCamp/curriculum/commit/20e3617)), closes [#82](https://github.com/freeCodeCamp/curriculum/issues/82) +* **challenges:** typo and grammatical error ([c1160c5](https://github.com/freeCodeCamp/curriculum/commit/c1160c5)) +* **challenges:** typo error ([2d3ca6d](https://github.com/freeCodeCamp/curriculum/commit/2d3ca6d)) +* **challenges:** typo in javascript algorithms/debugging/2 ([8286ff9](https://github.com/freeCodeCamp/curriculum/commit/8286ff9)) +* **challenges:** typos in some basic node and express challenges ([93277e5](https://github.com/freeCodeCamp/curriculum/commit/93277e5)), closes [#113](https://github.com/freeCodeCamp/curriculum/issues/113) [#114](https://github.com/freeCodeCamp/curriculum/issues/114) +* clarify unclear instructions ([2a7a3fa](https://github.com/freeCodeCamp/curriculum/commit/2a7a3fa)) +* incomplete Sass Test ([086a4a0](https://github.com/freeCodeCamp/curriculum/commit/086a4a0)) +* penguin colors to match directions ([0f4b8a9](https://github.com/freeCodeCamp/curriculum/commit/0f4b8a9)) +* **challenges:** update pseudo-element selector syntax from CSS2 to CSS3 ([15675e8](https://github.com/freeCodeCamp/curriculum/commit/15675e8)) +* **challenges:** update RegEx for testcase in es6 challenge ([857b3e9](https://github.com/freeCodeCamp/curriculum/commit/857b3e9)) +* **challenges:** update test suite CDN link ([a311e06](https://github.com/freeCodeCamp/curriculum/commit/a311e06)) +* **challenges:** updated dates ([21bb9d0](https://github.com/freeCodeCamp/curriculum/commit/21bb9d0)), closes [#17908](https://github.com/freeCodeCamp/curriculum/issues/17908) +* **gitignore file:** added .vscode and unpacked folder to the file ([1b8eb67](https://github.com/freeCodeCamp/curriculum/commit/1b8eb67)) + + +### Features + +* **challenge:** add tests for the timestamp microservice challenge ([0cb0da8](https://github.com/freeCodeCamp/curriculum/commit/0cb0da8)) + +## [3.0.1](https://github.com/freeCodeCamp/curriculum/compare/v3.0.0...v3.0.1) (2018-06-30) + + +### Bug Fixes + +* **challenges:** change comment to make it clearer ([#72](https://github.com/freeCodeCamp/curriculum/issues/72)) ([46fcf43](https://github.com/freeCodeCamp/curriculum/commit/46fcf43)) +* **challenges:** fix a test case in an Applied Accessibility ([4c0d587](https://github.com/freeCodeCamp/curriculum/commit/4c0d587)) +* **challenges:** remove unnecessary test cases ([17af3dd](https://github.com/freeCodeCamp/curriculum/commit/17af3dd)) +* **challenges:** removed a test in basic javascript challenge ([#76](https://github.com/freeCodeCamp/curriculum/issues/76)) ([ff26697](https://github.com/freeCodeCamp/curriculum/commit/ff26697)), closes [#73](https://github.com/freeCodeCamp/curriculum/issues/73) +* **challenges:** removed comment in the seed ([6a8a9db](https://github.com/freeCodeCamp/curriculum/commit/6a8a9db)) +* **challenges:** removed redundant text from challenge ([c37a1e8](https://github.com/freeCodeCamp/curriculum/commit/c37a1e8)), closes [#36](https://github.com/freeCodeCamp/curriculum/issues/36) + +# [3.0.0](https://github.com/freeCodeCamp/curriculum/compare/v2.0.0...v3.0.0) (2018-06-29) + + +### Bug Fixes + +* **challenge:** Fixed the typo for automatically ([#48](https://github.com/freeCodeCamp/curriculum/issues/48)) ([dd046d6](https://github.com/freeCodeCamp/curriculum/commit/dd046d6)) +* **challenge:** Updated tests to avoid confusion ([#57](https://github.com/freeCodeCamp/curriculum/issues/57)) ([7105507](https://github.com/freeCodeCamp/curriculum/commit/7105507)) +* **challenges:** change test for template literals challenge ([#37](https://github.com/freeCodeCamp/curriculum/issues/37)) ([4b1c5eb](https://github.com/freeCodeCamp/curriculum/commit/4b1c5eb)) +* **challenges:** cherry pick pr 17664 & 17672 from main repo ([#52](https://github.com/freeCodeCamp/curriculum/issues/52)) ([2375d0c](https://github.com/freeCodeCamp/curriculum/commit/2375d0c)) +* **challenges:** fixed telephone number validator project ([#53](https://github.com/freeCodeCamp/curriculum/issues/53)) ([2b034e2](https://github.com/freeCodeCamp/curriculum/commit/2b034e2)), closes [#47](https://github.com/freeCodeCamp/curriculum/issues/47) +* **challenges:** fixed typo in css-grid.json ([#46](https://github.com/freeCodeCamp/curriculum/issues/46)) ([e74192e](https://github.com/freeCodeCamp/curriculum/commit/e74192e)) +* **challenges:** grammar fix in css-grid auto-fit challenge ([#60](https://github.com/freeCodeCamp/curriculum/issues/60)) ([a6a0266](https://github.com/freeCodeCamp/curriculum/commit/a6a0266)) +* **challenges:** Typo errors ([#39](https://github.com/freeCodeCamp/curriculum/issues/39)) ([0c0702d](https://github.com/freeCodeCamp/curriculum/commit/0c0702d)) +* **challenges:** update regular expression that fails ([#56](https://github.com/freeCodeCamp/curriculum/issues/56)) ([9fa5907](https://github.com/freeCodeCamp/curriculum/commit/9fa5907)), closes [#55](https://github.com/freeCodeCamp/curriculum/issues/55) + +# [2.0.0](https://github.com/freeCodeCamp/curriculum/compare/v1.2.1...v2.0.0) (2018-06-24) + + +### Bug Fixes + +* **challenges:** Correct a regex in ES6 read-only challenge ([#41](https://github.com/freeCodeCamp/curriculum/issues/41)) ([cf9336a](https://github.com/freeCodeCamp/curriculum/commit/cf9336a)) +* **challenges:** fix responsive web design cert claim ([6e02f9d](https://github.com/freeCodeCamp/curriculum/commit/6e02f9d)) +* **interview-prep:** Remove duplicates ([816be51](https://github.com/freeCodeCamp/curriculum/commit/816be51)) + + +### Features + +* **interview-prep:** Porting Rosetta problems ([#17537](https://github.com/freeCodeCamp/curriculum/issues/17537)) ([21930a8](https://github.com/freeCodeCamp/curriculum/commit/21930a8)) + +## [1.2.1](https://github.com/freeCodeCamp/curriculum/compare/v1.2.0...v1.2.1) (2018-06-21) + +### Bug Fixes + +* changes text to bold in the JS Algo and DS ([#20](https://github.com/freeCodeCamp/curriculum/issues/20)) ([999c6af](https://github.com/freeCodeCamp/curriculum/commit/999c6af)) +* example link will open in new tab ([#22](https://github.com/freeCodeCamp/curriculum/issues/22)) ([5815401](https://github.com/freeCodeCamp/curriculum/commit/5815401)) +* give 'Exercise Tracker' the correct id ([6de827c](https://github.com/freeCodeCamp/curriculum/commit/6de827c)) +* Remove an unnecessary line from basic javascript challenge ([#19](https://github.com/freeCodeCamp/curriculum/issues/19)) ([e1dfe8f](https://github.com/freeCodeCamp/curriculum/commit/e1dfe8f)) +* sample code in intro to currying ([d4cf9de](https://github.com/freeCodeCamp/curriculum/commit/d4cf9de)) +* typo errors ([#23](https://github.com/freeCodeCamp/curriculum/issues/23)) ([16ff132](https://github.com/freeCodeCamp/curriculum/commit/16ff132)) + +# [1.2.0](https://github.com/freeCodeCamp/curriculum/compare/v1.1.3...v1.2.0) (2018-06-19) + + +### Bug Fixes + +* **challenges:** Fix typo in security challenge ([#17608](https://github.com/freeCodeCamp/curriculum/issues/17608)) ([1573455](https://github.com/freeCodeCamp/curriculum/commit/1573455)) +* blockquote-formatting-in-challenges ([#17590](https://github.com/freeCodeCamp/curriculum/issues/17590)) ([d31e0a3](https://github.com/freeCodeCamp/curriculum/commit/d31e0a3)) + + +### Features + +* **interview-prep:** Porting Rosetta problems ([#17537](https://github.com/freeCodeCamp/curriculum/issues/17537)) ([a133a3f](https://github.com/freeCodeCamp/curriculum/commit/a133a3f)) + + +### Reverts + +* "test(challenges): Corrected expected average value" ([#17568](https://github.com/freeCodeCamp/curriculum/issues/17568)) ([20fac4e](https://github.com/freeCodeCamp/curriculum/commit/20fac4e)) + +## [1.1.3](https://github.com/freeCodeCamp/curriculum/compare/v1.1.2...v1.1.3) (2018-06-13) + + +### Bug Fixes + +* remove extraneous build step ([20c0143](https://github.com/freeCodeCamp/curriculum/commit/20c0143)) diff --git a/curriculum/LICENSE.md b/curriculum/LICENSE.md new file mode 100644 index 0000000000..3b7b82d0da --- /dev/null +++ b/curriculum/LICENSE.md @@ -0,0 +1,427 @@ +Attribution-ShareAlike 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More_considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution-ShareAlike 4.0 International Public +License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution-ShareAlike 4.0 International Public License ("Public +License"). To the extent this Public License may be interpreted as a +contract, You are granted the Licensed Rights in consideration of Your +acceptance of these terms and conditions, and the Licensor grants You +such rights in consideration of benefits the Licensor receives from +making the Licensed Material available under these terms and +conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. BY-SA Compatible License means a license listed at + creativecommons.org/compatiblelicenses, approved by Creative + Commons as essentially the equivalent of this Public License. + + d. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + e. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + f. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + g. License Elements means the license attributes listed in the name + of a Creative Commons Public License. The License Elements of this + Public License are Attribution and ShareAlike. + + h. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + i. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + j. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + k. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + l. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + m. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part; and + + b. produce, reproduce, and Share Adapted Material. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. Additional offer from the Licensor -- Adapted Material. + Every recipient of Adapted Material from You + automatically receives an offer from the Licensor to + exercise the Licensed Rights in the Adapted Material + under the conditions of the Adapter's License You apply. + + c. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + b. ShareAlike. + + In addition to the conditions in Section 3(a), if You Share + Adapted Material You produce, the following conditions also apply. + + 1. The Adapter's License You apply must be a Creative Commons + license with the same License Elements, this version or + later, or a BY-SA Compatible License. + + 2. You must include the text of, or the URI or hyperlink to, the + Adapter's License You apply. You may satisfy this condition + in any reasonable manner based on the medium, means, and + context in which You Share Adapted Material. + + 3. You may not offer or impose any additional or different terms + or conditions on, or apply any Effective Technological + Measures to, Adapted Material that restrict exercise of the + rights granted under the Adapter's License You apply. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material, + + including for purposes of Section 3(b); and + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + + +======================================================================= + +Creative Commons is not a party to its public +licenses. Notwithstanding, Creative Commons may elect to apply one of +its public licenses to material it publishes and in those instances +will be considered the “Licensor.” The text of the Creative Commons +public licenses is dedicated to the public domain under the CC0 Public +Domain Dedication. Except for the limited purpose of indicating that +material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the +public licenses. + +Creative Commons may be contacted at creativecommons.org. diff --git a/curriculum/README.md b/curriculum/README.md new file mode 100644 index 0000000000..966056957a --- /dev/null +++ b/curriculum/README.md @@ -0,0 +1,94 @@ +![freeCodeCamp Social Banner](https://s3.amazonaws.com/freecodecamp/wide-social-banner.png) + +# freeCodeCamp Curriculum + +[![Build Status](https://travis-ci.org/freeCodeCamp/curriculum.svg?branch=master)](https://travis-ci.org/freeCodeCamp/curriculum) [![npm (scoped)](https://img.shields.io/npm/v/@freecodecamp/curriculum.svg)](https://www.npmjs.com/package/@freecodecamp/curriculum) +[![Pull Requests Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat)](http://makeapullrequest.com) +[![first-timers-only Friendly](https://img.shields.io/badge/first--timers--only-friendly-blue.svg)](http://www.firsttimersonly.com/) + +> This package contains the "challenge" files used in the freeCodeCamp Curriculum. + +## Installation + +```sh +npm i @freecodecamp/curriculum +# or +yarn add @freecodecamp/curriculum +``` + +## Usage + +```js +import { getChallenges } from '@freecodecamp/curriculum'; + +// fetch an array of blocks +// i.e. basic CSS, functional programming, etc. +getChallenges() +``` + +### `block` Structure + +```js +{ + "name": "ES6", + "order": 2, + "time": "5 hours", + "helpRoom": "Help", + "challenges": [/**/], + "fileName": "02-javascript-algorithms-and-data-structures/es6.json", + "superBlock": "javascript-algorithms-and-data-structures", + "superOrder": 2 +} +``` + +### `challenge` Structure + +```js +{ + "id": "ObjectId()", + "title": "Declare a Read-Only Variable with the const Keyword", + "description": [ + "A Description of the challenge and what is required to pass" + ], + "tests": [ + { + "text": "should return \"foo\"", + "testString": "a stringified function using Chai asserts" + } + ], + "challengeType": 1, + "translations": {}, + "files": { + "indexjs": { + "key": "indexjs", + "ext": "js", + "name": "index", + "contents": [ + "Initial editor seed" + ], + "head": [ + "A place for test set up", + "Can be thought of as mocha's beforeEach()" + ], + "tail": [ + "A place for test tear down", + "Can be thought of as mocha's afterEach()" + ] + } + } +}, +``` + +## Contributing + +1. 🍴 Fork this repo +2. 👀️ Follow the contributing guidelines outlined in [Contributing Guidelines](docs/CONTRIBUTING.md). +3. 🔧 Make some awesome changes! +4. 👉 [Make a pull request](https://github.com/freeCodeCamp/learn/compare) +5. 🎉 Get your pull request approved - success! + +## License + +Copyright (c) 2018 freeCodeCamp. + +The curricular content in this repo is licensed under the [CC-BY-SA-4.0](LICENSE.md) diff --git a/curriculum/addAssertsToTapTest.js b/curriculum/addAssertsToTapTest.js new file mode 100644 index 0000000000..58fb62a3e1 --- /dev/null +++ b/curriculum/addAssertsToTapTest.js @@ -0,0 +1,52 @@ +let _ = require('lodash'); + +function createIsAssert(tapTest, isThing) { + const { assert } = tapTest; + return function() { + const args = [...arguments]; + args[0] = isThing(args[0]); + assert.apply(tapTest, args); + }; +} + +function addAssertsToTapTest(tapTest) { + const assert = tapTest.assert; + + assert.isArray = createIsAssert(tapTest, _.isArray); + assert.isBoolean = createIsAssert(tapTest, _.isBoolean); + assert.isString = createIsAssert(tapTest, _.isString); + assert.isNumber = createIsAssert(tapTest, _.isNumber); + assert.isUndefined = createIsAssert(tapTest, _.isUndefined); + + assert.deepEqual = tapTest.deepEqual; + assert.equal = tapTest.equal; + assert.strictEqual = tapTest.equal; + assert.sameMembers = function sameMembers() { + const [ first, second, ...args] = arguments; + assert.apply( + tapTest, + [ + _.difference(first, second).length === 0 && + _.difference(second, first).length === 0 + ].concat(args) + ); + }; + assert.includeMembers = function includeMembers() { + const [ first, second, ...args] = arguments; + assert.apply(tapTest, + [ + _.difference(second, first).length === 0 + ].concat(args)); + }; + assert.match = function match() { + const [value, regex, ...args] = arguments; + assert.apply(tapTest, + [ + regex.test(value) + ].concat(args)); + }; + + return assert; +} + +module.exports = addAssertsToTapTest; diff --git a/curriculum/challengeTitles.js b/curriculum/challengeTitles.js new file mode 100644 index 0000000000..a43e144972 --- /dev/null +++ b/curriculum/challengeTitles.js @@ -0,0 +1,26 @@ +import _ from 'lodash'; + +class ChallengeTitles { + constructor() { + this.knownTitles = []; + } + check(title) { + if (typeof title !== 'string') { + throw new Error(`Expected a valid string for ${title}, but got a(n) ${typeof title}`); + } else if (title.length === 0) { + throw new Error(`Expected a title length greater than 0`); + } + const titleToCheck = title.toLowerCase().replace(/\s+/g, ''); + const isKnown = this.knownTitles.includes(titleToCheck); + if (isKnown) { + throw new Error(` + All challenges must have a unique title. + + The title ${title} is already assigned + `); + } + this.knownTitles = [ ...this.knownTitles, titleToCheck ]; + } +} + +export default ChallengeTitles; diff --git a/curriculum/challenges/01-responsive-web-design/applied-accessibility.json b/curriculum/challenges/01-responsive-web-design/applied-accessibility.json new file mode 100644 index 0000000000..cf0f358978 --- /dev/null +++ b/curriculum/challenges/01-responsive-web-design/applied-accessibility.json @@ -0,0 +1,1667 @@ +{ + "name": "Applied Accessibility", + "order": 3, + "time": "5 hours", + "helpRoom": "Help", + "challenges": [ + { + "id": "587d774c367417b2b2512a9c", + "title": + "Add a Text Alternative to Images for Visually Impaired Accessibility", + "description": [ + "It's likely you've seen an alt attribute on an img tag in other challenges. Alt text describes the content of the image and provides a text-alternative. This helps in case the image fails to load or can't be seen by a user. It's also used by search engines to understand what an image contains to include it in search results. Here's an example:", + "<img src="importantLogo.jpeg" alt="Company logo">", + "People with visual impairments rely on screen readers to convert web content to an audio interface. They won't get information if it's only presented visually. For images, screen readers can access the alt attribute and read its contents to deliver key information.", + "Good alt text is short but descriptive, and meant to briefly convey the meaning of the image. You should always include an alt attribute on your image. Per HTML5 specification, this is now considered mandatory.", + "


", + "Camper Cat happens to be both a coding ninja and an actual ninja, and is building a website to share his knowledge. The profile picture he wants to use shows his skills, and should be appreciated by all site visitors. Add an alt attribute in the img tag, that explains Camper Cat is doing karate. (The image src doesn't link to an actual file, so you should see the alt text in the display.)" + ], + "tests": [ + { + "text": + "Your img tag should have an alt attribute, and it should not be empty.", + "testString": + "assert($('img').attr('alt'), 'Your img tag should have an alt attribute, and it should not be empty.');" + } + ], + "solutions": [], + "hints": [], + "releasedOn": "Feb 17, 2017", + "challengeType": 0, + "translations": {}, + "videoUrl": "https://scrimba.com/c/cPp7VfD", + "guideUrl": + "https://guide.freecodecamp.org/certificates/add-alt-text-to-an-image-for-accessibility", + "files": { + "indexhtml": { + "key": "indexhtml", + "ext": "html", + "name": "index", + "contents": [""], + "head": [], + "tail": [] + } + } + }, + { + "id": "587d774c367417b2b2512a9d", + "title": "Know When Alt Text Should be Left Blank", + "description": [ + "In the last challenge, you learned that including an alt attribute on img tags is mandatory. However, sometimes images are grouped with a caption already describing them, or are used for decoration only. In these cases alt text may seem redundant or unnecessary.", + "In situations when an image is already explained with text content, or does not add meaning to a page, the img still needs an alt attribute, but it can be set to an empty string. Here's an example:", + "<img src="visualDecoration.jpeg" alt="">", + "Background images usually fall under the 'decorative' label as well. However, they are typically applied with CSS rules, and therefore not part of the markup screen readers process.", + "Note
For images with a caption, you may still want to include alt text, since it helps search engines catalog the content of the image.", + "
", + "Camper Cat has coded a skeleton page for the blog part of his website. He's planning to add a visual break between his two articles with a decorative image of a samurai sword. Add an alt attribute to the img tag and set it to an empty string. (Note that the image src doesn't link to an actual file - don't worry that there are no swords showing in the display.)" + ], + "tests": [ + { + "text": + "Your img tag should have an alt attribute.", + "testString": + "assert(!($('img').attr('alt') == undefined), 'Your img tag should have an alt attribute.');" + }, + { + "text": + "The alt attribute should be set to an empty string.", + "testString": + "assert($('img').attr('alt') == '', 'The alt attribute should be set to an empty string.');" + } + ], + "solutions": [], + "hints": [], + "releasedOn": "Feb 17, 2017", + "challengeType": 0, + "translations": {}, + "videoUrl": "https://scrimba.com/c/cM9P4t2", + "files": { + "indexhtml": { + "key": "indexhtml", + "ext": "html", + "name": "index", + "contents": [ + "

Deep Thoughts with Master Camper Cat

", + "
", + "

Defeating your Foe: the Red Dot is Ours!

", + "

To Come...

", + "
", + "", + "", + "", + "
", + "

Is Chuck Norris a Cat Person?

", + "

To Come...

", + "
" + ], + "head": [], + "tail": [] + } + } + }, + { + "id": "587d774d367417b2b2512a9e", + "title": "Use Headings to Show Hierarchical Relationships of Content", + "description": [ + "Headings (h1 through h6 elements) are workhorse tags that help provide structure and labeling to your content. Screen readers can be set to read only the headings on a page so the user gets a summary. This means it is important for the heading tags in your markup to have semantic meaning and relate to each other, not be picked merely for their size values.", + "Semantic meaning means that the tag you use around content indicates the type of information it contains.", + "If you were writing a paper with an introduction, a body, and a conclusion, it wouldn't make much sense to put the conclusion as a subsection of the body in your outline. It should be its own section. Similarly, the heading tags in a webpage need to go in order and indicate the hierarchical relationships of your content.", + "Headings with equal (or higher) rank start new implied sections, headings with lower rank start subsections of the previous one.", + "As an example, a page with an h2 element followed by several subsections labeled with h4 tags would confuse a screen reader user. With six choices, it's tempting to use a tag because it looks better in a browser, but you can use CSS to edit the relative sizing.", + "One final point, each page should always have one (and only one) h1 element, which is the main subject of your content. This and the other headings are used in part by search engines to understand the topic of the page.", + "
", + "Camper Cat wants a page on his site dedicated to becoming a ninja. Help him fix the headings so his markup gives semantic meaning to the content, and shows the proper parent-child relationships of his sections. Change all the h5 tags to the proper heading level to indicate they are subsections of the h2 ones." + ], + "tests": [ + { + "text": "Your code should have six h3 tags.", + "testString": + "assert($('h3').length === 6, 'Your code should have six h3 tags.');" + }, + { + "text": "Your code should not have any h5 tags.", + "testString": + "assert($('h5').length === 0, 'Your code should not have any h5 tags.');" + } + ], + "solutions": [], + "hints": [ + "All the h5 tags are siblings, and should be changed to the same new heading level." + ], + "releasedOn": "Feb 17, 2017", + "challengeType": 0, + "translations": {}, + "videoUrl": "https://scrimba.com/c/cqVEktm", + "files": { + "indexhtml": { + "key": "indexhtml", + "ext": "html", + "name": "index", + "contents": [ + "

How to Become a Ninja

", + "
", + "

Learn the Art of Moving Stealthily

", + "
How to Hide in Plain Sight
", + "
How to Climb a Wall
", + "", + "

Learn the Art of Battle

", + "
How to Strengthen your Body
", + "
How to Fight like a Ninja
", + "", + "

Learn the Art of Living with Honor

", + "
How to Breathe Properly
", + "
How to Simplify your Life
", + "
" + ], + "head": [], + "tail": [] + } + } + }, + { + "id": "587d774e367417b2b2512a9f", + "title": "Jump Straight to the Content Using the main Element", + "description": [ + "HTML5 introduced a number of new elements that give developers more options while also incorporating accessibility features. These tags include main, header, footer, nav, article, and section, among others.", + "By default, a browser renders these elements similarly to the humble div. However, using them where appropriate gives additional meaning in your markup. The tag name alone can indicate the type of information it contains, which adds semantic meaning to that content. Assistive technologies can access this information to provide better page summary or navigation options to their users.", + "The main element is used to wrap (you guessed it) the main content, and there should be only one per page. It's meant to surround the information that's related to the central topic of your page. It's not meant to include items that repeat across pages, like navigation links or banners.", + "The main tag also has an embedded landmark feature that assistive technology can use to quickly navigate to the main content. If you've ever seen a \"Jump to Main Content\" link at the top of a page, using a main tag automatically gives assistive devices that functionality.", + "
", + "Camper Cat has some big ideas for his ninja weapons page. Help him set up his markup by adding opening and closing main tags between the header and footer (covered in other challenges). Keep the main tags empty for now." + ], + "tests": [ + { + "text": "Your code should have one main tag.", + "testString": + "assert($('main').length == 1, 'Your code should have one main tag.');" + }, + { + "text": + "The main tags should be between the closing header tag and the opening footer tag.", + "testString": + "assert(code.match(/<\\/header>\\s*?
\\s*?<\\/main>/gi), 'The main tags should be between the closing header tag and the opening footer tag.');" + } + ], + "solutions": [], + "hints": [], + "releasedOn": "Feb 17, 2017", + "challengeType": 0, + "translations": {}, + "videoUrl": "https://scrimba.com/c/cPp7zuE", + "files": { + "indexhtml": { + "key": "indexhtml", + "ext": "html", + "name": "index", + "contents": [ + "
", + "

Weapons of the Ninja

", + "
", + "", + "", + "", + "
" + ], + "head": [], + "tail": [] + } + } + }, + { + "id": "587d774e367417b2b2512aa0", + "title": "Wrap Content in the article Element", + "description": [ + "article is another one of the new HTML5 elements that adds semantic meaning to your markup. Article is a sectioning element, and is used to wrap independent, self-contained content. The tag works well with blog entries, forum posts, or news articles.", + "Determining whether content can stand alone is usually a judgement call, but there are a couple simple tests you can use. Ask yourself if you removed all surrounding context, would that content still make sense? Similarly for text, would the content hold up if it were in an RSS feed?", + "Remember that folks using assistive technologies rely on organized, semantically meaningful markup to better understand your work.", + "Note about section and div
The section element is also new with HTML5, and has a slightly different semantic meaning than article. An article is for standalone content, and a section is for grouping thematically related content. They can be used within each other, as needed. For example, if a book is the article, then each chapter is a section. When there's no relationship between groups of content, then use a div.", + "
<div> - groups content
<section> - groups related content
<article> - groups independent, self-contained content
", + "
", + "Camper Cat used article tags to wrap the posts on his blog page, but he forgot to use them around the top one. Change the div tag to use an article tag instead." + ], + "tests": [ + { + "text": "Your code should have three article tags.", + "testString": + "assert($('article').length == 3, 'Your code should have three article tags.');" + }, + { + "text": "Your code should not have any div tags.", + "testString": + "assert($('div').length == 0, 'Your code should not have any div tags.');" + } + ], + "solutions": [], + "hints": [], + "releasedOn": "Feb 17, 2017", + "challengeType": 0, + "translations": {}, + "videoUrl": "https://scrimba.com/c/cPp79S3", + "files": { + "indexhtml": { + "key": "indexhtml", + "ext": "html", + "name": "index", + "contents": [ + "

Deep Thoughts with Master Camper Cat

", + "
", + "
", + "

The Garfield Files: Lasagna as Training Fuel?

", + "

The internet is littered with varying opinions on nutritional paradigms, from catnip paleo to hairball cleanses. But let's turn our attention to an often overlooked fitness fuel, and examine the protein-carb-NOM trifecta that is lasagna...

", + "
", + "", + " \"\"", + "", + "
", + "

Defeating your Foe: the Red Dot is Ours!

", + "

Felines the world over have been waging war on the most persistent of foes. This red nemesis combines both cunning stealth and lightening speed. But chin up, fellow fighters, our time for victory may soon be near...

", + "
", + "", + " \"\"", + "", + "
", + "

Is Chuck Norris a Cat Person?

", + "

Chuck Norris is widely regarded as the premier martial artist on the planet, and it's a complete coincidence anyone who disagrees with this fact mysteriously disappears soon after. But the real question is, is he a cat person?...

", + "
", + "
" + ], + "head": [], + "tail": [] + } + } + }, + { + "id": "587d7787367417b2b2512aa1", + "title": "Make Screen Reader Navigation Easier with the header Landmark", + "description": [ + "The next HTML5 element that adds semantic meaning and improves accessibility is the header tag. It's used to wrap introductory information or navigation links for its parent tag, and works well around content that's repeated at the top on multiple pages.", + "header shares the embedded landmark feature you saw with main, allowing assistive technologies to quickly navigate to that content.", + "Note
header is meant for use in the body tag of your HTML document. This is different than the head element, which contains the page's title, meta information, etc.", + "
", + "Camper Cat is writing some great articles about ninja training, and wants to add a page for them to his site. Change the top div that currently contains the h1 to a header tag instead." + ], + "tests": [ + { + "text": "Your code should have one header tag.", + "testString": + "assert($('header').length == 1, 'Your code should have one header tag.');" + }, + { + "text": + "Your header tags should wrap around the h1.", + "testString": + "assert($('header').children('h1').length == 1, 'Your header tags should wrap around the h1.');" + }, + { + "text": "Your code should not have any div tags.", + "testString": + "assert($('div').length == 0, 'Your code should not have any div tags.');" + }, + { + "text": + "Make sure your header element has a closing tag.", + "testString": + "assert(code.match(/<\\/header>/g) && code.match(/<\\/header>/g).length === code.match(/
/g).length, 'Make sure your header element has a closing tag.');" + } + ], + "solutions": [], + "hints": [], + "releasedOn": "Feb 17, 2017", + "challengeType": 0, + "translations": {}, + "videoUrl": "https://scrimba.com/c/czVwWSv", + "files": { + "indexhtml": { + "key": "indexhtml", + "ext": "html", + "name": "index", + "contents": [ + "", + "", + "
", + "

Training with Camper Cat

", + "
", + "", + "", + "
", + "
", + "

Stealth & Agility Training

", + "

Climb foliage quickly using a minimum spanning tree approach

", + "

No training is NP-complete without parkour

", + "
", + "
", + "

Combat Training

", + "

Dispatch multiple enemies with multithreaded tactics

", + "

Goodbye world: 5 proven ways to knock out an opponent

", + "
", + "
", + "

Weapons Training

", + "

Swords: the best tool to literally divide and conquer

", + "

Breadth-first or depth-first in multi-weapon training?

", + "
", + "
", + "" + ], + "head": [], + "tail": [] + } + } + }, + { + "id": "587d7788367417b2b2512aa2", + "title": "Make Screen Reader Navigation Easier with the nav Landmark", + "description": [ + "The nav element is another HTML5 item with the embedded landmark feature for easy screen reader navigation. This tag is meant to wrap around the main navigation links in your page.", + "If there are repeated site links at the bottom of the page, it isn't necessary to markup those with a nav tag as well. Using a footer (covered in the next challenge) is sufficient.", + "
", + "Camper Cat included navigation links at the top of his training page, but wrapped them in a div. Change the div to a nav tag to improve the accessibility on his page." + ], + "tests": [ + { + "text": "Your code should have one nav tag.", + "testString": + "assert($('nav').length == 1, 'Your code should have one nav tag.');" + }, + { + "text": + "Your nav tags should wrap around the ul and its list items.", + "testString": + "assert($('nav').children('ul').length == 1, 'Your nav tags should wrap around the ul and its list items.');" + }, + { + "text": "Your code should not have any div tags.", + "testString": + "assert($('div').length == 0, 'Your code should not have any div tags.');" + }, + { + "text": "Make sure your nav element has a closing tag.", + "testString": + "assert(code.match(/<\\/nav>/g) && code.match(/<\\/nav>/g).length === code.match(/