From 928dcbe08c547f02f4b8e516c823014eb21fe822 Mon Sep 17 00:00:00 2001 From: Sem Bauke Date: Wed, 8 Feb 2023 15:21:03 +0100 Subject: [PATCH] feat: transfer The Odin Project to its own superblock (#49202) * feat: the odin-project superblock * feat: break everything * fix: correct meta names * fix: meta again * fix: tests * fix: help category and external curriculum test * fix: file names again * fix: help category * fix: remove console log --------- Co-authored-by: Oliver Eyton-Williams --- client/i18n/locales/english/intro.json | 26 ++++++--- client/src/assets/icons/index.tsx | 4 +- client/src/assets/icons/viking-helmet.tsx | 17 ++++++ .../src/pages/learn/the-odin-project/index.md | 9 ++++ .../top-build-a-recipe-page-project/index.md | 9 ++++ .../top-learn-html-foundations/index.md | 9 ++++ .../Introduction/super-block-intro.tsx | 21 ++++---- client/src/utils/superblock-map-titles.ts | 5 +- client/utils/help-category-map.json | 4 +- config/certification-settings.ts | 3 +- config/superblock-order.test.ts | 4 +- config/superblock-order.ts | 53 +++++++++++++++---- .../meta.json | 7 ++- .../meta.json | 7 ++- .../top-build-a-recipe-project.md} | 2 +- .../elements-and-tags-question-a.md | 0 .../elements-and-tags-question-b.md | 0 .../html-boilerplate-question-a.md | 0 .../html-boilerplate-question-b.md | 0 .../html-boilerplate-question-c.md | 0 .../html-boilerplate-question-d.md | 0 .../introduction-to-html-css-question-a.md | 0 .../introduction-to-html-css-question-b.md | 0 .../introduction-to-html-css-question-c.md | 0 .../introduction-to-html-css-question-d.md | 0 .../links-and-images-question-a.md | 0 .../links-and-images-question-b.md | 0 .../links-and-images-question-c.md | 0 .../links-and-images-question-d.md | 0 .../links-and-images-question-e.md | 0 .../links-and-images-question-f.md | 0 .../links-and-images-question-g.md | 0 .../links-and-images-question-h.md | 0 ...d-ordered-and-unordered-list-question-a.md | 0 ...d-ordered-and-unordered-list-question-b.md | 0 ...d-ordered-and-unordered-list-question-c.md | 0 .../working-with-text-question-a.md | 0 .../working-with-text-question-b.md | 0 .../working-with-text-question-c.md | 0 .../working-with-text-question-d.md | 0 .../working-with-text-question-e.md | 0 .../working-with-text-question-f.md | 0 .../working-with-text-question-g.md | 0 curriculum/utils.js | 3 +- curriculum/utils.test.ts | 12 +++-- tools/challenge-auditor/index.ts | 3 +- .../api/configs/super-block-list.ts | 4 ++ tools/challenge-helper-scripts/fs-utils.ts | 3 +- .../build-external-curricula-data.test.ts | 8 ++- 49 files changed, 160 insertions(+), 53 deletions(-) create mode 100644 client/src/assets/icons/viking-helmet.tsx create mode 100644 client/src/pages/learn/the-odin-project/index.md create mode 100644 client/src/pages/learn/the-odin-project/top-build-a-recipe-page-project/index.md create mode 100644 client/src/pages/learn/the-odin-project/top-learn-html-foundations/index.md rename curriculum/challenges/_meta/{the-odin-project-projects => top-build-a-recipe-project}/meta.json (60%) rename curriculum/challenges/_meta/{the-odin-project => top-learn-html-foundations}/meta.json (95%) rename curriculum/challenges/english/{10-coding-interview-prep/the-odin-project-projects/project-create-a-recipe-page.md => 16-the-odin-project/top-build-a-recipe-project/top-build-a-recipe-project.md} (99%) rename curriculum/challenges/english/{10-coding-interview-prep/the-odin-project => 16-the-odin-project/top-learn-html-foundations}/elements-and-tags-question-a.md (100%) rename curriculum/challenges/english/{10-coding-interview-prep/the-odin-project => 16-the-odin-project/top-learn-html-foundations}/elements-and-tags-question-b.md (100%) rename curriculum/challenges/english/{10-coding-interview-prep/the-odin-project => 16-the-odin-project/top-learn-html-foundations}/html-boilerplate-question-a.md (100%) rename curriculum/challenges/english/{10-coding-interview-prep/the-odin-project => 16-the-odin-project/top-learn-html-foundations}/html-boilerplate-question-b.md (100%) rename curriculum/challenges/english/{10-coding-interview-prep/the-odin-project => 16-the-odin-project/top-learn-html-foundations}/html-boilerplate-question-c.md (100%) rename curriculum/challenges/english/{10-coding-interview-prep/the-odin-project => 16-the-odin-project/top-learn-html-foundations}/html-boilerplate-question-d.md (100%) rename curriculum/challenges/english/{10-coding-interview-prep/the-odin-project => 16-the-odin-project/top-learn-html-foundations}/introduction-to-html-css-question-a.md (100%) rename curriculum/challenges/english/{10-coding-interview-prep/the-odin-project => 16-the-odin-project/top-learn-html-foundations}/introduction-to-html-css-question-b.md (100%) rename curriculum/challenges/english/{10-coding-interview-prep/the-odin-project => 16-the-odin-project/top-learn-html-foundations}/introduction-to-html-css-question-c.md (100%) rename curriculum/challenges/english/{10-coding-interview-prep/the-odin-project => 16-the-odin-project/top-learn-html-foundations}/introduction-to-html-css-question-d.md (100%) rename curriculum/challenges/english/{10-coding-interview-prep/the-odin-project => 16-the-odin-project/top-learn-html-foundations}/links-and-images-question-a.md (100%) rename curriculum/challenges/english/{10-coding-interview-prep/the-odin-project => 16-the-odin-project/top-learn-html-foundations}/links-and-images-question-b.md (100%) rename curriculum/challenges/english/{10-coding-interview-prep/the-odin-project => 16-the-odin-project/top-learn-html-foundations}/links-and-images-question-c.md (100%) rename curriculum/challenges/english/{10-coding-interview-prep/the-odin-project => 16-the-odin-project/top-learn-html-foundations}/links-and-images-question-d.md (100%) rename curriculum/challenges/english/{10-coding-interview-prep/the-odin-project => 16-the-odin-project/top-learn-html-foundations}/links-and-images-question-e.md (100%) rename curriculum/challenges/english/{10-coding-interview-prep/the-odin-project => 16-the-odin-project/top-learn-html-foundations}/links-and-images-question-f.md (100%) rename curriculum/challenges/english/{10-coding-interview-prep/the-odin-project => 16-the-odin-project/top-learn-html-foundations}/links-and-images-question-g.md (100%) rename curriculum/challenges/english/{10-coding-interview-prep/the-odin-project => 16-the-odin-project/top-learn-html-foundations}/links-and-images-question-h.md (100%) rename curriculum/challenges/english/{10-coding-interview-prep/the-odin-project => 16-the-odin-project/top-learn-html-foundations}/understand-ordered-and-unordered-list-question-a.md (100%) rename curriculum/challenges/english/{10-coding-interview-prep/the-odin-project => 16-the-odin-project/top-learn-html-foundations}/understand-ordered-and-unordered-list-question-b.md (100%) rename curriculum/challenges/english/{10-coding-interview-prep/the-odin-project => 16-the-odin-project/top-learn-html-foundations}/understand-ordered-and-unordered-list-question-c.md (100%) rename curriculum/challenges/english/{10-coding-interview-prep/the-odin-project => 16-the-odin-project/top-learn-html-foundations}/working-with-text-question-a.md (100%) rename curriculum/challenges/english/{10-coding-interview-prep/the-odin-project => 16-the-odin-project/top-learn-html-foundations}/working-with-text-question-b.md (100%) rename curriculum/challenges/english/{10-coding-interview-prep/the-odin-project => 16-the-odin-project/top-learn-html-foundations}/working-with-text-question-c.md (100%) rename curriculum/challenges/english/{10-coding-interview-prep/the-odin-project => 16-the-odin-project/top-learn-html-foundations}/working-with-text-question-d.md (100%) rename curriculum/challenges/english/{10-coding-interview-prep/the-odin-project => 16-the-odin-project/top-learn-html-foundations}/working-with-text-question-e.md (100%) rename curriculum/challenges/english/{10-coding-interview-prep/the-odin-project => 16-the-odin-project/top-learn-html-foundations}/working-with-text-question-f.md (100%) rename curriculum/challenges/english/{10-coding-interview-prep/the-odin-project => 16-the-odin-project/top-learn-html-foundations}/working-with-text-question-g.md (100%) diff --git a/client/i18n/locales/english/intro.json b/client/i18n/locales/english/intro.json index 17926a60efb..c1d679e160e 100644 --- a/client/i18n/locales/english/intro.json +++ b/client/i18n/locales/english/intro.json @@ -778,14 +778,6 @@ "Attribute: Rosetta Code" ] }, - "the-odin-project": { - "title": "The Odin Project", - "intro": ["A description is to be determined"] - }, - "the-odin-project-projects": { - "title": "The Odin Project Projects", - "intro": ["A description is to be determined"] - }, "project-euler": { "title": "Project Euler", "intro": [ @@ -795,6 +787,24 @@ } } }, + "the-odin-project": { + "title": "The Odin Project", + "intro": [ + "The Odin Project is one of those \"What I wish I had when I was learning\" resources. ", + "Not everyone has access to a computer science education or the funds to attend an intensive coding school and neither of those is right for everyone anyway.", + "This project is designed to fill in the gap for people who are trying to hack it on their own but still want a high quality education." + ], + "blocks": { + "top-learn-html-foundations": { + "title": "Learn HTML Foundations", + "intro": ["A description is to be determined"] + }, + "top-build-a-recipe-project": { + "title": "Learn HTML Foundations by Building a Recipe Page", + "intro": ["A description is to be determined"] + } + } + }, "misc-text": { "certification": "{{cert}} Certification", "browse-other": "Browse our other free certifications\n(we recommend doing these in order)", diff --git a/client/src/assets/icons/index.tsx b/client/src/assets/icons/index.tsx index 4adcec517a3..ae851d8eeb7 100644 --- a/client/src/assets/icons/index.tsx +++ b/client/src/assets/icons/index.tsx @@ -12,6 +12,7 @@ import Clipboard from './clipboard'; import PythonIcon from './python-icon'; import ResponsiveDesign from './responsive-design'; import Shield from './shield'; +import VikingHelmet from './viking-helmet'; const iconMap = { [SuperBlocks.RespWebDesignNew]: ResponsiveDesign, @@ -27,7 +28,8 @@ const iconMap = { [SuperBlocks.DataAnalysisPy]: Analytics, [SuperBlocks.InfoSec]: Shield, [SuperBlocks.MachineLearningPy]: TensorflowIcon, - [SuperBlocks.CodingInterviewPrep]: Algorithm + [SuperBlocks.CodingInterviewPrep]: Algorithm, + [SuperBlocks.TheOdinProject]: VikingHelmet }; const generateIconComponent = ( diff --git a/client/src/assets/icons/viking-helmet.tsx b/client/src/assets/icons/viking-helmet.tsx new file mode 100644 index 00000000000..ab29caa29f3 --- /dev/null +++ b/client/src/assets/icons/viking-helmet.tsx @@ -0,0 +1,17 @@ +import React from 'react'; + +function VikingHelmet( + props: JSX.IntrinsicAttributes & React.SVGProps +): JSX.Element { + return ( + <> + + + + + ); +} + +VikingHelmet.displayName = 'VikingHelmet'; + +export default VikingHelmet; diff --git a/client/src/pages/learn/the-odin-project/index.md b/client/src/pages/learn/the-odin-project/index.md new file mode 100644 index 00000000000..e600d4a7334 --- /dev/null +++ b/client/src/pages/learn/the-odin-project/index.md @@ -0,0 +1,9 @@ +--- +title: The Odin Project +superBlock: the-odin-project +certification: the-odin-project +--- + +## The Odin project + +The Odin Project is one of those "What I wish I had when I was learning" resources. Not everyone has access to a computer science education or the funds to attend an intensive coding school and neither of those is right for everyone anyway. This project is designed to fill in the gap for people who are trying to hack it on their own but still want a high quality education. diff --git a/client/src/pages/learn/the-odin-project/top-build-a-recipe-page-project/index.md b/client/src/pages/learn/the-odin-project/top-build-a-recipe-page-project/index.md new file mode 100644 index 00000000000..39bc4dc70b8 --- /dev/null +++ b/client/src/pages/learn/the-odin-project/top-build-a-recipe-page-project/index.md @@ -0,0 +1,9 @@ +--- +title: The Odin Project +superBlock: the-odin-project +certification: the-odin-project +--- + +## The Odin project + +Description is to be determined diff --git a/client/src/pages/learn/the-odin-project/top-learn-html-foundations/index.md b/client/src/pages/learn/the-odin-project/top-learn-html-foundations/index.md new file mode 100644 index 00000000000..39bc4dc70b8 --- /dev/null +++ b/client/src/pages/learn/the-odin-project/top-learn-html-foundations/index.md @@ -0,0 +1,9 @@ +--- +title: The Odin Project +superBlock: the-odin-project +certification: the-odin-project +--- + +## The Odin project + +Description is to be determined diff --git a/client/src/templates/Introduction/super-block-intro.tsx b/client/src/templates/Introduction/super-block-intro.tsx index e48882d03ad..e9ecc075298 100644 --- a/client/src/templates/Introduction/super-block-intro.tsx +++ b/client/src/templates/Introduction/super-block-intro.tsx @@ -210,16 +210,17 @@ const SuperBlockIntroductionPage = (props: SuperBlockProp) => { /> ))} - {superBlock !== SuperBlocks.CodingInterviewPrep && ( -
- -
- )} + {superBlock !== SuperBlocks.CodingInterviewPrep && + superBlock !== SuperBlocks.TheOdinProject && ( +
+ +
+ )} {!isSignedIn && !signInLoading && (
diff --git a/client/src/utils/superblock-map-titles.ts b/client/src/utils/superblock-map-titles.ts index fa2ec32c994..1615bc2f5e8 100644 --- a/client/src/utils/superblock-map-titles.ts +++ b/client/src/utils/superblock-map-titles.ts @@ -9,7 +9,10 @@ enum SuperBlockI18nKeys { // the key above is used to create the last word for superBlock titles used on // the map and window. e.g. 'Certification' in Responsive Web Design // Certification -const superBlocksWithoutLastWord = [SuperBlocks.CodingInterviewPrep]; +const superBlocksWithoutLastWord = [ + SuperBlocks.CodingInterviewPrep, + SuperBlocks.TheOdinProject +]; export function getSuperBlockTitleForMap(superBlock: SuperBlocks) { const i18nSuperBlock = i18next.t(`intro:${superBlock}.title`); diff --git a/client/utils/help-category-map.json b/client/utils/help-category-map.json index f4f141c7b83..40ea39ab04e 100644 --- a/client/utils/help-category-map.json +++ b/client/utils/help-category-map.json @@ -42,8 +42,8 @@ "algorithms": "JavaScript", "data-structures": "JavaScript", "take-home-projects": "JavaScript", - "the-odin-project": "HTML-CSS", - "the-odin-project-projects": "HTML-CSS", + "top-learn-html-foundations": "HTML-CSS", + "top-build-a-recipe-project": "HTML-CSS", "rosetta-code": "JavaScript", "project-euler": "JavaScript", "scientific-computing-with-python": "Python", diff --git a/config/certification-settings.ts b/config/certification-settings.ts index aea15811b79..dd7f943c707 100644 --- a/config/certification-settings.ts +++ b/config/certification-settings.ts @@ -31,7 +31,8 @@ export enum SuperBlocks { DataAnalysisPy = 'data-analysis-with-python', InfoSec = 'information-security', MachineLearningPy = 'machine-learning-with-python', - CodingInterviewPrep = 'coding-interview-prep' + CodingInterviewPrep = 'coding-interview-prep', + TheOdinProject = 'the-odin-project' } export const certIds = { diff --git a/config/superblock-order.test.ts b/config/superblock-order.test.ts index 233f7c4d60c..cf21825a48b 100644 --- a/config/superblock-order.test.ts +++ b/config/superblock-order.test.ts @@ -150,6 +150,7 @@ describe("'superBlockOrder' helper functions", () => { SuperBlocks.MachineLearningPy, SuperBlocks.CodingInterviewPrep, SuperBlocks.JsAlgoDataStructNew, + SuperBlocks.TheOdinProject, SuperBlocks.RespWebDesign ]; expect(learnSuperBlocks).toStrictEqual(test); @@ -188,7 +189,8 @@ describe("'superBlockOrder' helper functions", () => { SuperBlocks.InfoSec, SuperBlocks.MachineLearningPy, SuperBlocks.CodingInterviewPrep, - SuperBlocks.JsAlgoDataStructNew + SuperBlocks.JsAlgoDataStructNew, + SuperBlocks.TheOdinProject ]; expect(notAuditedSuperBlocks).toStrictEqual(test); expect(notAuditedSuperBlocks.length).toEqual(test.length); diff --git a/config/superblock-order.ts b/config/superblock-order.ts index 8be124ca9e5..a7ba0346a0a 100644 --- a/config/superblock-order.ts +++ b/config/superblock-order.ts @@ -78,7 +78,8 @@ export const defaultSuperBlockOrder: SuperBlocks[] = [ SuperBlocks.DataAnalysisPy, SuperBlocks.InfoSec, SuperBlocks.MachineLearningPy, - SuperBlocks.CodingInterviewPrep + SuperBlocks.CodingInterviewPrep, + SuperBlocks.TheOdinProject ]; /* @@ -124,7 +125,10 @@ export const superBlockOrder: SuperBlockOrder = { SuperBlocks.CodingInterviewPrep ], [SuperBlockStates.New]: [], - [SuperBlockStates.Upcoming]: [SuperBlocks.JsAlgoDataStructNew], + [SuperBlockStates.Upcoming]: [ + SuperBlocks.JsAlgoDataStructNew, + SuperBlocks.TheOdinProject + ], [SuperBlockStates.Legacy]: [SuperBlocks.RespWebDesign] }, [TranslationStates.NotAudited]: { @@ -173,7 +177,10 @@ export const superBlockOrder: SuperBlockOrder = { SuperBlocks.CodingInterviewPrep ], [SuperBlockStates.New]: [], - [SuperBlockStates.Upcoming]: [SuperBlocks.JsAlgoDataStructNew], + [SuperBlockStates.Upcoming]: [ + SuperBlocks.JsAlgoDataStructNew, + SuperBlocks.TheOdinProject + ], [SuperBlockStates.Legacy]: [] } } @@ -216,7 +223,10 @@ export const superBlockOrder: SuperBlockOrder = { SuperBlocks.CodingInterviewPrep ], [SuperBlockStates.New]: [], - [SuperBlockStates.Upcoming]: [SuperBlocks.JsAlgoDataStructNew], + [SuperBlockStates.Upcoming]: [ + SuperBlocks.JsAlgoDataStructNew, + SuperBlocks.TheOdinProject + ], [SuperBlockStates.Legacy]: [] } } @@ -259,7 +269,10 @@ export const superBlockOrder: SuperBlockOrder = { SuperBlocks.CodingInterviewPrep ], [SuperBlockStates.New]: [], - [SuperBlockStates.Upcoming]: [SuperBlocks.JsAlgoDataStructNew], + [SuperBlockStates.Upcoming]: [ + SuperBlocks.JsAlgoDataStructNew, + SuperBlocks.TheOdinProject + ], [SuperBlockStates.Legacy]: [] } } @@ -301,7 +314,10 @@ export const superBlockOrder: SuperBlockOrder = { [TranslationStates.NotAudited]: { [SuperBlockStates.Current]: [], [SuperBlockStates.New]: [], - [SuperBlockStates.Upcoming]: [SuperBlocks.JsAlgoDataStructNew], + [SuperBlockStates.Upcoming]: [ + SuperBlocks.JsAlgoDataStructNew, + SuperBlocks.TheOdinProject + ], [SuperBlockStates.Legacy]: [] } } @@ -343,7 +359,10 @@ export const superBlockOrder: SuperBlockOrder = { [TranslationStates.NotAudited]: { [SuperBlockStates.Current]: [], [SuperBlockStates.New]: [], - [SuperBlockStates.Upcoming]: [SuperBlocks.JsAlgoDataStructNew], + [SuperBlockStates.Upcoming]: [ + SuperBlocks.JsAlgoDataStructNew, + SuperBlocks.TheOdinProject + ], [SuperBlockStates.Legacy]: [] } } @@ -384,7 +403,10 @@ export const superBlockOrder: SuperBlockOrder = { [TranslationStates.NotAudited]: { [SuperBlockStates.Current]: [SuperBlocks.CodingInterviewPrep], [SuperBlockStates.New]: [], - [SuperBlockStates.Upcoming]: [SuperBlocks.JsAlgoDataStructNew], + [SuperBlockStates.Upcoming]: [ + SuperBlocks.JsAlgoDataStructNew, + SuperBlocks.TheOdinProject + ], [SuperBlockStates.Legacy]: [] } } @@ -427,7 +449,10 @@ export const superBlockOrder: SuperBlockOrder = { [TranslationStates.NotAudited]: { [SuperBlockStates.Current]: [], [SuperBlockStates.New]: [], - [SuperBlockStates.Upcoming]: [SuperBlocks.JsAlgoDataStructNew], + [SuperBlockStates.Upcoming]: [ + SuperBlocks.JsAlgoDataStructNew, + SuperBlocks.TheOdinProject + ], [SuperBlockStates.Legacy]: [] } } @@ -471,7 +496,10 @@ export const superBlockOrder: SuperBlockOrder = { SuperBlocks.CodingInterviewPrep ], [SuperBlockStates.New]: [], - [SuperBlockStates.Upcoming]: [SuperBlocks.JsAlgoDataStructNew], + [SuperBlockStates.Upcoming]: [ + SuperBlocks.JsAlgoDataStructNew, + SuperBlocks.TheOdinProject + ], [SuperBlockStates.Legacy]: [] } } @@ -514,7 +542,10 @@ export const superBlockOrder: SuperBlockOrder = { SuperBlocks.CodingInterviewPrep ], [SuperBlockStates.New]: [], - [SuperBlockStates.Upcoming]: [SuperBlocks.JsAlgoDataStructNew], + [SuperBlockStates.Upcoming]: [ + SuperBlocks.JsAlgoDataStructNew, + SuperBlocks.TheOdinProject + ], [SuperBlockStates.Legacy]: [SuperBlocks.RespWebDesign] } } diff --git a/curriculum/challenges/_meta/the-odin-project-projects/meta.json b/curriculum/challenges/_meta/top-build-a-recipe-project/meta.json similarity index 60% rename from curriculum/challenges/_meta/the-odin-project-projects/meta.json rename to curriculum/challenges/_meta/top-build-a-recipe-project/meta.json index edd3de40ae3..df2b93d2096 100644 --- a/curriculum/challenges/_meta/the-odin-project-projects/meta.json +++ b/curriculum/challenges/_meta/top-build-a-recipe-project/meta.json @@ -1,12 +1,11 @@ { - "name": "The Odin Project Projects", + "name": "TOP build a recipe project", "isUpcomingChange": true, - "dashedName": "the-odin-project-projects", - "order": 6, + "order": 1, "time": "", "template": "", "required": [], - "superBlock": "coding-interview-prep", + "superBlock": "the-odin-project", "challengeOrder": [ [ "6391d1a4f7ac71efd0621380", diff --git a/curriculum/challenges/_meta/the-odin-project/meta.json b/curriculum/challenges/_meta/top-learn-html-foundations/meta.json similarity index 95% rename from curriculum/challenges/_meta/the-odin-project/meta.json rename to curriculum/challenges/_meta/top-learn-html-foundations/meta.json index 44d7f47d50b..b15490e569c 100644 --- a/curriculum/challenges/_meta/the-odin-project/meta.json +++ b/curriculum/challenges/_meta/top-learn-html-foundations/meta.json @@ -1,12 +1,11 @@ { - "name": "The Odin Project", + "name": "TOP Learn HTML Foundations", "isUpcomingChange": true, - "dashedName": "the-odin-project", - "order": 5, + "order": 0, "time": "", "template": "", "required": [], - "superBlock": "coding-interview-prep", + "superBlock": "the-odin-project", "challengeOrder": [ [ "6374f208de18c50e48ba767b", diff --git a/curriculum/challenges/english/10-coding-interview-prep/the-odin-project-projects/project-create-a-recipe-page.md b/curriculum/challenges/english/16-the-odin-project/top-build-a-recipe-project/top-build-a-recipe-project.md similarity index 99% rename from curriculum/challenges/english/10-coding-interview-prep/the-odin-project-projects/project-create-a-recipe-page.md rename to curriculum/challenges/english/16-the-odin-project/top-build-a-recipe-project/top-build-a-recipe-project.md index 7f7926e3df6..d810de57171 100644 --- a/curriculum/challenges/english/10-coding-interview-prep/the-odin-project-projects/project-create-a-recipe-page.md +++ b/curriculum/challenges/english/16-the-odin-project/top-build-a-recipe-project/top-build-a-recipe-project.md @@ -2,7 +2,7 @@ id: 6391d1a4f7ac71efd0621380 title: Build a Recipe Page Project challengeType: 14 -dashedName: project-create-a-recipe-page +dashedName: top-build-a-recipe-project --- # --description-- diff --git a/curriculum/challenges/english/10-coding-interview-prep/the-odin-project/elements-and-tags-question-a.md b/curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/elements-and-tags-question-a.md similarity index 100% rename from curriculum/challenges/english/10-coding-interview-prep/the-odin-project/elements-and-tags-question-a.md rename to curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/elements-and-tags-question-a.md diff --git a/curriculum/challenges/english/10-coding-interview-prep/the-odin-project/elements-and-tags-question-b.md b/curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/elements-and-tags-question-b.md similarity index 100% rename from curriculum/challenges/english/10-coding-interview-prep/the-odin-project/elements-and-tags-question-b.md rename to curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/elements-and-tags-question-b.md diff --git a/curriculum/challenges/english/10-coding-interview-prep/the-odin-project/html-boilerplate-question-a.md b/curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/html-boilerplate-question-a.md similarity index 100% rename from curriculum/challenges/english/10-coding-interview-prep/the-odin-project/html-boilerplate-question-a.md rename to curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/html-boilerplate-question-a.md diff --git a/curriculum/challenges/english/10-coding-interview-prep/the-odin-project/html-boilerplate-question-b.md b/curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/html-boilerplate-question-b.md similarity index 100% rename from curriculum/challenges/english/10-coding-interview-prep/the-odin-project/html-boilerplate-question-b.md rename to curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/html-boilerplate-question-b.md diff --git a/curriculum/challenges/english/10-coding-interview-prep/the-odin-project/html-boilerplate-question-c.md b/curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/html-boilerplate-question-c.md similarity index 100% rename from curriculum/challenges/english/10-coding-interview-prep/the-odin-project/html-boilerplate-question-c.md rename to curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/html-boilerplate-question-c.md diff --git a/curriculum/challenges/english/10-coding-interview-prep/the-odin-project/html-boilerplate-question-d.md b/curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/html-boilerplate-question-d.md similarity index 100% rename from curriculum/challenges/english/10-coding-interview-prep/the-odin-project/html-boilerplate-question-d.md rename to curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/html-boilerplate-question-d.md diff --git a/curriculum/challenges/english/10-coding-interview-prep/the-odin-project/introduction-to-html-css-question-a.md b/curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/introduction-to-html-css-question-a.md similarity index 100% rename from curriculum/challenges/english/10-coding-interview-prep/the-odin-project/introduction-to-html-css-question-a.md rename to curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/introduction-to-html-css-question-a.md diff --git a/curriculum/challenges/english/10-coding-interview-prep/the-odin-project/introduction-to-html-css-question-b.md b/curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/introduction-to-html-css-question-b.md similarity index 100% rename from curriculum/challenges/english/10-coding-interview-prep/the-odin-project/introduction-to-html-css-question-b.md rename to curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/introduction-to-html-css-question-b.md diff --git a/curriculum/challenges/english/10-coding-interview-prep/the-odin-project/introduction-to-html-css-question-c.md b/curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/introduction-to-html-css-question-c.md similarity index 100% rename from curriculum/challenges/english/10-coding-interview-prep/the-odin-project/introduction-to-html-css-question-c.md rename to curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/introduction-to-html-css-question-c.md diff --git a/curriculum/challenges/english/10-coding-interview-prep/the-odin-project/introduction-to-html-css-question-d.md b/curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/introduction-to-html-css-question-d.md similarity index 100% rename from curriculum/challenges/english/10-coding-interview-prep/the-odin-project/introduction-to-html-css-question-d.md rename to curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/introduction-to-html-css-question-d.md diff --git a/curriculum/challenges/english/10-coding-interview-prep/the-odin-project/links-and-images-question-a.md b/curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/links-and-images-question-a.md similarity index 100% rename from curriculum/challenges/english/10-coding-interview-prep/the-odin-project/links-and-images-question-a.md rename to curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/links-and-images-question-a.md diff --git a/curriculum/challenges/english/10-coding-interview-prep/the-odin-project/links-and-images-question-b.md b/curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/links-and-images-question-b.md similarity index 100% rename from curriculum/challenges/english/10-coding-interview-prep/the-odin-project/links-and-images-question-b.md rename to curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/links-and-images-question-b.md diff --git a/curriculum/challenges/english/10-coding-interview-prep/the-odin-project/links-and-images-question-c.md b/curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/links-and-images-question-c.md similarity index 100% rename from curriculum/challenges/english/10-coding-interview-prep/the-odin-project/links-and-images-question-c.md rename to curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/links-and-images-question-c.md diff --git a/curriculum/challenges/english/10-coding-interview-prep/the-odin-project/links-and-images-question-d.md b/curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/links-and-images-question-d.md similarity index 100% rename from curriculum/challenges/english/10-coding-interview-prep/the-odin-project/links-and-images-question-d.md rename to curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/links-and-images-question-d.md diff --git a/curriculum/challenges/english/10-coding-interview-prep/the-odin-project/links-and-images-question-e.md b/curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/links-and-images-question-e.md similarity index 100% rename from curriculum/challenges/english/10-coding-interview-prep/the-odin-project/links-and-images-question-e.md rename to curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/links-and-images-question-e.md diff --git a/curriculum/challenges/english/10-coding-interview-prep/the-odin-project/links-and-images-question-f.md b/curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/links-and-images-question-f.md similarity index 100% rename from curriculum/challenges/english/10-coding-interview-prep/the-odin-project/links-and-images-question-f.md rename to curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/links-and-images-question-f.md diff --git a/curriculum/challenges/english/10-coding-interview-prep/the-odin-project/links-and-images-question-g.md b/curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/links-and-images-question-g.md similarity index 100% rename from curriculum/challenges/english/10-coding-interview-prep/the-odin-project/links-and-images-question-g.md rename to curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/links-and-images-question-g.md diff --git a/curriculum/challenges/english/10-coding-interview-prep/the-odin-project/links-and-images-question-h.md b/curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/links-and-images-question-h.md similarity index 100% rename from curriculum/challenges/english/10-coding-interview-prep/the-odin-project/links-and-images-question-h.md rename to curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/links-and-images-question-h.md diff --git a/curriculum/challenges/english/10-coding-interview-prep/the-odin-project/understand-ordered-and-unordered-list-question-a.md b/curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/understand-ordered-and-unordered-list-question-a.md similarity index 100% rename from curriculum/challenges/english/10-coding-interview-prep/the-odin-project/understand-ordered-and-unordered-list-question-a.md rename to curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/understand-ordered-and-unordered-list-question-a.md diff --git a/curriculum/challenges/english/10-coding-interview-prep/the-odin-project/understand-ordered-and-unordered-list-question-b.md b/curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/understand-ordered-and-unordered-list-question-b.md similarity index 100% rename from curriculum/challenges/english/10-coding-interview-prep/the-odin-project/understand-ordered-and-unordered-list-question-b.md rename to curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/understand-ordered-and-unordered-list-question-b.md diff --git a/curriculum/challenges/english/10-coding-interview-prep/the-odin-project/understand-ordered-and-unordered-list-question-c.md b/curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/understand-ordered-and-unordered-list-question-c.md similarity index 100% rename from curriculum/challenges/english/10-coding-interview-prep/the-odin-project/understand-ordered-and-unordered-list-question-c.md rename to curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/understand-ordered-and-unordered-list-question-c.md diff --git a/curriculum/challenges/english/10-coding-interview-prep/the-odin-project/working-with-text-question-a.md b/curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/working-with-text-question-a.md similarity index 100% rename from curriculum/challenges/english/10-coding-interview-prep/the-odin-project/working-with-text-question-a.md rename to curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/working-with-text-question-a.md diff --git a/curriculum/challenges/english/10-coding-interview-prep/the-odin-project/working-with-text-question-b.md b/curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/working-with-text-question-b.md similarity index 100% rename from curriculum/challenges/english/10-coding-interview-prep/the-odin-project/working-with-text-question-b.md rename to curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/working-with-text-question-b.md diff --git a/curriculum/challenges/english/10-coding-interview-prep/the-odin-project/working-with-text-question-c.md b/curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/working-with-text-question-c.md similarity index 100% rename from curriculum/challenges/english/10-coding-interview-prep/the-odin-project/working-with-text-question-c.md rename to curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/working-with-text-question-c.md diff --git a/curriculum/challenges/english/10-coding-interview-prep/the-odin-project/working-with-text-question-d.md b/curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/working-with-text-question-d.md similarity index 100% rename from curriculum/challenges/english/10-coding-interview-prep/the-odin-project/working-with-text-question-d.md rename to curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/working-with-text-question-d.md diff --git a/curriculum/challenges/english/10-coding-interview-prep/the-odin-project/working-with-text-question-e.md b/curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/working-with-text-question-e.md similarity index 100% rename from curriculum/challenges/english/10-coding-interview-prep/the-odin-project/working-with-text-question-e.md rename to curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/working-with-text-question-e.md diff --git a/curriculum/challenges/english/10-coding-interview-prep/the-odin-project/working-with-text-question-f.md b/curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/working-with-text-question-f.md similarity index 100% rename from curriculum/challenges/english/10-coding-interview-prep/the-odin-project/working-with-text-question-f.md rename to curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/working-with-text-question-f.md diff --git a/curriculum/challenges/english/10-coding-interview-prep/the-odin-project/working-with-text-question-g.md b/curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/working-with-text-question-g.md similarity index 100% rename from curriculum/challenges/english/10-coding-interview-prep/the-odin-project/working-with-text-question-g.md rename to curriculum/challenges/english/16-the-odin-project/top-learn-html-foundations/working-with-text-question-g.md diff --git a/curriculum/utils.js b/curriculum/utils.js index 16b0beba57f..c9f18d45ee8 100644 --- a/curriculum/utils.js +++ b/curriculum/utils.js @@ -120,7 +120,8 @@ const directoryToSuperblock = { '13-relational-databases': 'relational-database', '14-responsive-web-design-22': '2022/responsive-web-design', '15-javascript-algorithms-and-data-structures-22': - '2022/javascript-algorithms-and-data-structures' + '2022/javascript-algorithms-and-data-structures', + '16-the-odin-project': 'the-odin-project' }; function getSuperBlockFromDir(dir) { diff --git a/curriculum/utils.test.ts b/curriculum/utils.test.ts index 28a817a688c..8f27689c9ac 100644 --- a/curriculum/utils.test.ts +++ b/curriculum/utils.test.ts @@ -39,7 +39,8 @@ const upcomingTest = { [SuperBlocks.MachineLearningPy]: 10, [SuperBlocks.CodingInterviewPrep]: 11, [SuperBlocks.JsAlgoDataStructNew]: 12, - [SuperBlocks.RespWebDesign]: 13 + [SuperBlocks.TheOdinProject]: 13, + [SuperBlocks.RespWebDesign]: 14 }; const espanolTest = { @@ -144,7 +145,7 @@ describe('getSuperOrder', () => { if (process.env.SHOW_UPCOMING_CHANGES !== 'true') { expect.assertions(13); } else { - expect.assertions(14); + expect.assertions(15); } expect(getSuperOrder(SuperBlocks.RespWebDesignNew)).toBe(0); @@ -162,7 +163,8 @@ describe('getSuperOrder', () => { if (process.env.SHOW_UPCOMING_CHANGES === 'true') { expect(getSuperOrder(SuperBlocks.JsAlgoDataStructNew)).toBe(12); - expect(getSuperOrder(SuperBlocks.RespWebDesign)).toBe(13); + expect(getSuperOrder(SuperBlocks.TheOdinProject)).toBe(13); + expect(getSuperOrder(SuperBlocks.RespWebDesign)).toBe(14); } else { expect(getSuperOrder(SuperBlocks.RespWebDesign)).toBe(12); } @@ -175,7 +177,7 @@ describe('getSuperBlockFromPath', () => { ); it('handles all the directories in ./challenges/english', () => { - expect.assertions(15); + expect.assertions(16); for (const directory of directories) { expect(() => getSuperBlockFromDir(directory)).not.toThrow(); @@ -183,7 +185,7 @@ describe('getSuperBlockFromPath', () => { }); it("returns valid superblocks (or 'certifications') for all valid arguments", () => { - expect.assertions(15); + expect.assertions(16); const superBlockPaths = directories.filter(x => x !== '00-certifications'); diff --git a/tools/challenge-auditor/index.ts b/tools/challenge-auditor/index.ts index 564deb5a72a..4fa66ce5936 100644 --- a/tools/challenge-auditor/index.ts +++ b/tools/challenge-auditor/index.ts @@ -29,7 +29,8 @@ const superBlockFolderMap = { 'relational-database': '13-relational-database', '2022/responsive-web-design': '14-responsive-web-design-22', '2022/javascript-algorithms-and-data-structures': - '15-javascript-algorithms-and-data-structures-22' + '15-javascript-algorithms-and-data-structures-22', + 'the-odin-project': '16-the-odin-project' }; // These blocks are in the incorrect superblock. They should be moved but, for diff --git a/tools/challenge-editor/api/configs/super-block-list.ts b/tools/challenge-editor/api/configs/super-block-list.ts index 28b0d6eb7ad..d5655f8f9a4 100644 --- a/tools/challenge-editor/api/configs/super-block-list.ts +++ b/tools/challenge-editor/api/configs/super-block-list.ts @@ -54,5 +54,9 @@ export const superBlockList = [ { name: 'JavaScript Algorithms and Data Structures (Beta)', path: '15-javascript-algorithms-and-data-structures-22' + }, + { + name: 'The Odin Project', + path: '16-the-odin-project' } ]; diff --git a/tools/challenge-helper-scripts/fs-utils.ts b/tools/challenge-helper-scripts/fs-utils.ts index 410f98deb5f..ad479a27177 100644 --- a/tools/challenge-helper-scripts/fs-utils.ts +++ b/tools/challenge-helper-scripts/fs-utils.ts @@ -17,7 +17,8 @@ export function getSuperBlockSubPath(superBlock: SuperBlocks): string { [SuperBlocks.RelationalDb]: '13-relational-databases', [SuperBlocks.RespWebDesignNew]: '14-responsive-web-design-22', [SuperBlocks.JsAlgoDataStructNew]: - '15-javascript-algorithms-and-data-structures-22' + '15-javascript-algorithms-and-data-structures-22', + [SuperBlocks.TheOdinProject]: '16-the-odin-project' }; return pathMap[superBlock]; } diff --git a/tools/scripts/build/build-external-curricula-data.test.ts b/tools/scripts/build/build-external-curricula-data.test.ts index 9ff08d2e8a7..737260af2e6 100644 --- a/tools/scripts/build/build-external-curricula-data.test.ts +++ b/tools/scripts/build/build-external-curricula-data.test.ts @@ -82,10 +82,16 @@ if (envData.clientLocale == 'english' && !envData.showUpcomingChanges) { const dashedNames = orderedSuperBlockInfo.map( ({ dashedName }) => dashedName ); + + const isUpcoming = [ + '2022/javascript-algorithms-and-data-structures', + 'the-odin-project' + ]; + // TODO: this is a hack, we should have a single source of truth for the // list of superblocks that are available. const publicSuperBlockNames = Object.values(SuperBlocks).filter( - x => x !== '2022/javascript-algorithms-and-data-structures' + x => !isUpcoming.includes(x) ); expect(dashedNames).toEqual(