mirror of
https://github.com/freeCodeCamp/freeCodeCamp.git
synced 2026-05-28 18:26:54 +00:00
feat(curriculum): Add A1 Chinese Outline (#61655)
Co-authored-by: Huyen Nguyen <25715018+huyenltnguyen@users.noreply.github.com>
This commit is contained in:
@@ -37,6 +37,7 @@ const a2EnglishBase = '/learn/a2-english-for-developers';
|
||||
const b1EnglishBase = '/learn/b1-english-for-developers';
|
||||
const a2SpanishBase = '/learn/a2-professional-spanish';
|
||||
const a2ChineseBase = '/learn/a2-professional-chinese';
|
||||
const a1ChineseBase = '/learn/a1-professional-chinese';
|
||||
const legacyFrontEndBase = feLibsBase;
|
||||
const legacyFrontEndResponsiveBase = responsiveWebBase;
|
||||
const legacyFrontEndTakeHomeBase = takeHomeBase;
|
||||
@@ -865,6 +866,20 @@ const allStandardCerts = [
|
||||
certSlug: Certification.A2Chinese
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: '682c3153086dd7cabe7f48bc',
|
||||
title: 'A1 Professional Chinese',
|
||||
certSlug: Certification.A1Chinese,
|
||||
projects: [
|
||||
{
|
||||
id: '682c2753317b88f1ecdad894',
|
||||
title: 'Dialogue 1: PLACEHOLDER',
|
||||
link: `${a1ChineseBase}/learn-essential-courtesies-at-the-office
|
||||
/text-1`,
|
||||
certSlug: Certification.A1Chinese
|
||||
}
|
||||
]
|
||||
}
|
||||
] as const;
|
||||
|
||||
|
||||
@@ -4771,6 +4771,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"a1-professional-chinese": {
|
||||
"title": "A1 Professional Chinese Certification (Beta)",
|
||||
"note": "This certification is currently in active development. While there isn't a claimable certification available for this section at the moment, one will be available soon. In the meantime, you're welcome to explore the courses we have created below.",
|
||||
"intro": ["Placeholder intro"],
|
||||
"blocks": {
|
||||
"learn-essential-courtesies-at-the-office": {
|
||||
"title": "Learn Essential Courtesies at the Office",
|
||||
"intro": [
|
||||
"Learn simple and polite ways to communicate at work. In this module, you'll learn essential phrases for greeting colleagues, expressing thanks, apologizing, and saying goodbye."
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"basic-html": {
|
||||
"title": "Basic HTML",
|
||||
"summary": [
|
||||
|
||||
@@ -1184,6 +1184,8 @@
|
||||
"a2-professional-spanish-cert": "A2 Professional Spanish Certification",
|
||||
"a2-professional-chinese": "A2 Professional Chinese",
|
||||
"a2-professional-chinese-cert": "A2 Professional Chinese Certification",
|
||||
"a1-professional-chinese": "A1 Professional Chinese",
|
||||
"a1-professional-chinese-cert": "A1 Professional Chinese Certification",
|
||||
"legacy-front-end": "Legacy Front End",
|
||||
"legacy-front-end-cert": "Legacy Front End Certification",
|
||||
"legacy-back-end": "Legacy Back End",
|
||||
|
||||
@@ -45,6 +45,7 @@ const iconMap = {
|
||||
[SuperBlocks.B1English]: B1EnglishIcon,
|
||||
[SuperBlocks.A2Spanish]: A2EnglishIcon,
|
||||
[SuperBlocks.A2Chinese]: A2EnglishIcon,
|
||||
[SuperBlocks.A1Chinese]: A2EnglishIcon,
|
||||
[SuperBlocks.RosettaCode]: RosettaCodeIcon,
|
||||
[SuperBlocks.PythonForEverybody]: PythonIcon,
|
||||
[SuperBlocks.BasicHtml]: Code,
|
||||
|
||||
@@ -93,6 +93,7 @@ const createCertifiedMap = ({
|
||||
[Certification.B1English]: false,
|
||||
[Certification.A2Spanish]: false,
|
||||
[Certification.A2Chinese]: false,
|
||||
[Certification.A1Chinese]: false,
|
||||
[Certification.JsAlgoDataStructNew]: isJsAlgoDataStructCertV8
|
||||
});
|
||||
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
---
|
||||
title: A1 Professional Chinese
|
||||
superBlock: a1-professional-chinese
|
||||
certification: a1-professional-chinese
|
||||
---
|
||||
|
||||
## Introduction to A1 Professional Chinese
|
||||
|
||||
A1 Professional Chinese
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
---
|
||||
title: Introduction to Learn Essential Courtesies at the Office
|
||||
block: get-to-know-colleagues-by-asking-simple-questions
|
||||
superBlock: a1-professional-chinese
|
||||
---
|
||||
|
||||
## Introduction to Learn Essential Courtesies at the Office
|
||||
|
||||
Introduction to Learn Essential Courtesies at the Office
|
||||
@@ -57,6 +57,7 @@ export const ConditionalDonationAlert = ({
|
||||
SuperBlocks.B1English,
|
||||
SuperBlocks.A2Spanish,
|
||||
SuperBlocks.A2Chinese,
|
||||
SuperBlocks.A1Chinese,
|
||||
SuperBlocks.FullStackDeveloper
|
||||
];
|
||||
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"name": "Learn Essential Courtesies at the Office",
|
||||
"isUpcomingChange": true,
|
||||
"dashedName": "learn-essential-courtesies-at-the-office",
|
||||
"order": 1,
|
||||
"superBlock": "a1-professional-chinese",
|
||||
"challengeOrder": [
|
||||
{
|
||||
"id": "688f1daf0133dbe2a36b140b",
|
||||
"title": "Dialogue 1: PLACEHOLDER"
|
||||
}
|
||||
],
|
||||
"helpCategory": "English",
|
||||
"blockLayout": "dialogue-grid"
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
---
|
||||
id: 688f1daf0133dbe2a36b140b
|
||||
title: A1 Professional Chinese Certification
|
||||
certification: a1-professional-chinese-certification
|
||||
challengeType: 7
|
||||
isPrivate: true
|
||||
tests:
|
||||
- id: 688f1daf0133dbe2a36b140b
|
||||
title: "Dialogue 1: PLACEHOLDER"
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
---
|
||||
id: 688f1daf0133dbe2a36b140b
|
||||
title: "Dialogue 1: PLACEHOLDER"
|
||||
challengeType: 21
|
||||
dashedName: dialogue-1-placeholder
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Watch the video below to understand the context of the upcoming lessons.
|
||||
|
||||
# --assignment--
|
||||
|
||||
Watch the video
|
||||
|
||||
# --scene--
|
||||
|
||||
```json
|
||||
{
|
||||
"setup": {
|
||||
"background": "chaos.png",
|
||||
"characters": [
|
||||
{
|
||||
"character": "David",
|
||||
"position": {"x":50,"y":80,"z":8},
|
||||
"opacity": 0
|
||||
}
|
||||
],
|
||||
"audio": {
|
||||
"filename": "1.1-1.mp3",
|
||||
"startTime": 1,
|
||||
"startTimestamp": 5.7,
|
||||
"finishTimestamp": 6.48
|
||||
}
|
||||
},
|
||||
"commands": [
|
||||
{
|
||||
"character": "David",
|
||||
"opacity": 1,
|
||||
"startTime": 0
|
||||
},
|
||||
{
|
||||
"character": "David",
|
||||
"startTime": 1,
|
||||
"finishTime": 0.78,
|
||||
"dialogue": {
|
||||
"text": "I'm Tom.",
|
||||
"align": "center"
|
||||
}
|
||||
},
|
||||
{
|
||||
"character": "Tom",
|
||||
"opacity": 0,
|
||||
"startTime": 1.28
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
@@ -178,7 +178,7 @@ describe('getSuperBlockFromPath', () => {
|
||||
.filter(item => fs.lstatSync(path.join(englishFolder, item)).isDirectory());
|
||||
|
||||
it('handles all the directories in ./challenges/english', () => {
|
||||
expect.assertions(29);
|
||||
expect.assertions(30);
|
||||
|
||||
for (const directory of directories) {
|
||||
expect(() => getSuperBlockFromDir(directory)).not.toThrow();
|
||||
@@ -186,7 +186,7 @@ describe('getSuperBlockFromPath', () => {
|
||||
});
|
||||
|
||||
it("returns valid superblocks (or 'certifications') for all valid arguments", () => {
|
||||
expect.assertions(29);
|
||||
expect.assertions(30);
|
||||
|
||||
const superBlockPaths = directories.filter(x => x !== '00-certifications');
|
||||
|
||||
|
||||
@@ -31,6 +31,7 @@ export enum Certification {
|
||||
B1English = 'b1-english-for-developers-v8',
|
||||
A2Spanish = 'a2-professional-spanish-v8',
|
||||
A2Chinese = 'a2-professional-chinese-v8',
|
||||
A1Chinese = 'a1-professional-chinese-v8',
|
||||
// Legacy certifications
|
||||
LegacyFrontEnd = 'legacy-front-end',
|
||||
JsAlgoDataStruct = 'javascript-algorithms-and-data-structures',
|
||||
@@ -81,7 +82,8 @@ export const upcomingCertifications = [
|
||||
Certification.A2English,
|
||||
Certification.B1English,
|
||||
Certification.A2Spanish,
|
||||
Certification.A2Chinese
|
||||
Certification.A2Chinese,
|
||||
Certification.A1Chinese
|
||||
] as const;
|
||||
|
||||
export const certTypes = {
|
||||
@@ -276,6 +278,7 @@ export const superBlockToCertMap: {
|
||||
[SuperBlocks.B1English]: Certification.B1English,
|
||||
[SuperBlocks.A2Spanish]: Certification.A2Spanish,
|
||||
[SuperBlocks.A2Chinese]: Certification.A2Chinese,
|
||||
[SuperBlocks.A1Chinese]: Certification.A1Chinese,
|
||||
[SuperBlocks.PythonForEverybody]: null,
|
||||
[SuperBlocks.CodingInterviewPrep]: null,
|
||||
[SuperBlocks.ProjectEuler]: null,
|
||||
@@ -312,7 +315,8 @@ export const linkedInCredentialIds = {
|
||||
[Certification.A2English]: 'a2efd',
|
||||
[Certification.B1English]: 'b1efd',
|
||||
[Certification.A2Spanish]: 'a2ps',
|
||||
[Certification.A2Chinese]: 'a2pc'
|
||||
[Certification.A2Chinese]: 'a2pc',
|
||||
[Certification.A1Chinese]: 'a1pc'
|
||||
};
|
||||
|
||||
export const oldDataVizId = '561add10cb82ac38a17513b3';
|
||||
|
||||
@@ -27,6 +27,7 @@ export enum SuperBlocks {
|
||||
B1English = 'b1-english-for-developers',
|
||||
A2Spanish = 'a2-professional-spanish',
|
||||
A2Chinese = 'a2-professional-chinese',
|
||||
A1Chinese = 'a1-professional-chinese',
|
||||
RosettaCode = 'rosetta-code',
|
||||
PythonForEverybody = 'python-for-everybody',
|
||||
BasicHtml = 'basic-html',
|
||||
@@ -65,6 +66,7 @@ export const superBlockToFolderMap = {
|
||||
[SuperBlocks.A2Chinese]: '27-a2-professional-chinese',
|
||||
[SuperBlocks.BasicHtml]: '28-basic-html',
|
||||
[SuperBlocks.SemanticHtml]: '29-semantic-html',
|
||||
[SuperBlocks.A1Chinese]: '30-a1-professional-chinese',
|
||||
[SuperBlocks.DevPlayground]: '99-dev-playground'
|
||||
};
|
||||
|
||||
@@ -155,6 +157,7 @@ export const superBlockStages: StageMap = {
|
||||
[SuperBlockStage.Upcoming]: [
|
||||
SuperBlocks.A2Spanish,
|
||||
SuperBlocks.A2Chinese,
|
||||
SuperBlocks.A1Chinese,
|
||||
SuperBlocks.DevPlayground
|
||||
],
|
||||
// Catalog is treated like upcoming for now
|
||||
@@ -188,6 +191,7 @@ export const notAuditedSuperBlocks: NotAuditedSuperBlocks = {
|
||||
SuperBlocks.B1English,
|
||||
SuperBlocks.A2Spanish,
|
||||
SuperBlocks.A2Chinese,
|
||||
SuperBlocks.A1Chinese,
|
||||
SuperBlocks.PythonForEverybody,
|
||||
SuperBlocks.BasicHtml,
|
||||
SuperBlocks.SemanticHtml,
|
||||
@@ -202,6 +206,7 @@ export const notAuditedSuperBlocks: NotAuditedSuperBlocks = {
|
||||
SuperBlocks.B1English,
|
||||
SuperBlocks.A2Spanish,
|
||||
SuperBlocks.A2Chinese,
|
||||
SuperBlocks.A1Chinese,
|
||||
SuperBlocks.PythonForEverybody,
|
||||
SuperBlocks.BasicHtml,
|
||||
SuperBlocks.SemanticHtml,
|
||||
@@ -216,6 +221,7 @@ export const notAuditedSuperBlocks: NotAuditedSuperBlocks = {
|
||||
SuperBlocks.B1English,
|
||||
SuperBlocks.A2Spanish,
|
||||
SuperBlocks.A2Chinese,
|
||||
SuperBlocks.A1Chinese,
|
||||
SuperBlocks.PythonForEverybody,
|
||||
SuperBlocks.BasicHtml,
|
||||
SuperBlocks.SemanticHtml,
|
||||
@@ -230,6 +236,7 @@ export const notAuditedSuperBlocks: NotAuditedSuperBlocks = {
|
||||
SuperBlocks.B1English,
|
||||
SuperBlocks.A2Spanish,
|
||||
SuperBlocks.A2Chinese,
|
||||
SuperBlocks.A1Chinese,
|
||||
SuperBlocks.PythonForEverybody,
|
||||
SuperBlocks.BasicHtml,
|
||||
SuperBlocks.SemanticHtml,
|
||||
@@ -242,6 +249,7 @@ export const notAuditedSuperBlocks: NotAuditedSuperBlocks = {
|
||||
SuperBlocks.B1English,
|
||||
SuperBlocks.A2Spanish,
|
||||
SuperBlocks.A2Chinese,
|
||||
SuperBlocks.A1Chinese,
|
||||
SuperBlocks.PythonForEverybody,
|
||||
SuperBlocks.BasicHtml,
|
||||
SuperBlocks.SemanticHtml,
|
||||
@@ -254,6 +262,7 @@ export const notAuditedSuperBlocks: NotAuditedSuperBlocks = {
|
||||
SuperBlocks.B1English,
|
||||
SuperBlocks.A2Spanish,
|
||||
SuperBlocks.A2Chinese,
|
||||
SuperBlocks.A1Chinese,
|
||||
SuperBlocks.BasicHtml,
|
||||
SuperBlocks.SemanticHtml,
|
||||
SuperBlocks.DevPlayground
|
||||
@@ -266,6 +275,7 @@ export const notAuditedSuperBlocks: NotAuditedSuperBlocks = {
|
||||
SuperBlocks.B1English,
|
||||
SuperBlocks.A2Spanish,
|
||||
SuperBlocks.A2Chinese,
|
||||
SuperBlocks.A1Chinese,
|
||||
SuperBlocks.BasicHtml,
|
||||
SuperBlocks.SemanticHtml,
|
||||
SuperBlocks.DevPlayground
|
||||
@@ -286,6 +296,7 @@ export const notAuditedSuperBlocks: NotAuditedSuperBlocks = {
|
||||
SuperBlocks.B1English,
|
||||
SuperBlocks.A2Spanish,
|
||||
SuperBlocks.A2Chinese,
|
||||
SuperBlocks.A1Chinese,
|
||||
SuperBlocks.PythonForEverybody,
|
||||
SuperBlocks.BasicHtml,
|
||||
SuperBlocks.SemanticHtml,
|
||||
@@ -314,6 +325,7 @@ export const notAuditedSuperBlocks: NotAuditedSuperBlocks = {
|
||||
SuperBlocks.B1English,
|
||||
SuperBlocks.A2Spanish,
|
||||
SuperBlocks.A2Chinese,
|
||||
SuperBlocks.A1Chinese,
|
||||
SuperBlocks.PythonForEverybody,
|
||||
SuperBlocks.BasicHtml,
|
||||
SuperBlocks.SemanticHtml,
|
||||
@@ -340,6 +352,7 @@ export const notAuditedSuperBlocks: NotAuditedSuperBlocks = {
|
||||
SuperBlocks.B1English,
|
||||
SuperBlocks.A2Spanish,
|
||||
SuperBlocks.A2Chinese,
|
||||
SuperBlocks.A1Chinese,
|
||||
SuperBlocks.PythonForEverybody,
|
||||
SuperBlocks.DataVis,
|
||||
SuperBlocks.RelationalDb,
|
||||
|
||||
@@ -106,5 +106,9 @@ export const superBlockList = [
|
||||
{
|
||||
name: 'Semantic HTML',
|
||||
path: '29-semantic-html'
|
||||
},
|
||||
{
|
||||
name: 'A1 Professional Chinese (Beta)',
|
||||
path: '30-a1-professional-chinese'
|
||||
}
|
||||
];
|
||||
|
||||
@@ -15,7 +15,8 @@ const taskBasedSuperblocks = [
|
||||
'21-a2-english-for-developers',
|
||||
'24-b1-english-for-developers',
|
||||
'26-a2-professional-spanish',
|
||||
'27-a2-professional-chinese'
|
||||
'27-a2-professional-chinese',
|
||||
'30-a1-professional-chinese'
|
||||
];
|
||||
|
||||
const Block = () => {
|
||||
|
||||
@@ -26,5 +26,6 @@ export const superBlockNameMap: { [key: string]: string } = {
|
||||
'24-b1-english-for-developers': 'b1-english-for-developers',
|
||||
'25-front-end-development': 'full-stack-developer',
|
||||
'26-a2-professional-spanish': 'a2-professional-spanish',
|
||||
'27-a2-professional-chinese': 'a2-professional-chinese'
|
||||
'27-a2-professional-chinese': 'a2-professional-chinese',
|
||||
'30-a1-professional-chinese': 'a1-professional-chinese'
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user