diff --git a/client/i18n/intro-schema.js b/client/i18n/intro-schema.js index fb790b747f..07980da317 100644 --- a/client/i18n/intro-schema.js +++ b/client/i18n/intro-schema.js @@ -10,13 +10,6 @@ const introSchema = { "First, you'll build a cat photo app to learn the basics of HTML and CSS. Later, you'll learn modern techniques like CSS variables by building a penguin, and best practices for accessibility by building a web form.", "Finally, you'll learn how to make webpages that respond to different screen sizes by building a Twitter card with Flexbox, and a complex blog layout with CSS Grid." ], - image: - 'https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/building_websites_i78t.svg', - 'image-alt': 'Three people designing a responsive website layout together', - icon: - 'https://cdn3.iconfinder.com/data/icons/seo-web-5-1/128/Vigor_responsive-web-design-adaptive-64.png', - 'icon-alt': - 'A computer monitor with the desktop view and a smartphone with the mobile view of the same website.', blocks: { 'basic-html-and-html5': { title: 'Basic HTML and HTML5', @@ -95,12 +88,6 @@ const introSchema = { "Once you have the fundamentals down, you'll apply that knowledge by creating algorithms to manipulate strings, factorialize numbers, and even calculate the orbit of the International Space Station.", "Along the way, you'll also learn two important programing styles or paradigms: Object Oriented Programing (OOP), and Functional Programing (FP)." ], - image: - 'https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/dev_focus_b9xo.svg', - 'image-alt': 'A person working on a laptop', - icon: - 'https://i2.wp.com/info.widespace.com/wp-content/uploads/2016/03/javascript-shield-logo.png?ssl=1', - 'icon-alt': 'JavaScript shield logo', blocks: { 'basic-javascript': { title: 'Basic JavaScript', @@ -195,12 +182,6 @@ const introSchema = { "In the Front End Libraries Certification, you'll learn how to style your site quickly with Bootstrap. You'll also learn how add logic to your CSS styles and extend them with Sass.", "Later, you'll build a shopping cart and other applications to learn how to create powerful Single Page Applications (SPAs) with React and Redux." ], - image: - 'https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/react_y7wq.svg', - 'image-alt': 'A person sitting atop the react logo', - icon: - 'https://cdn4.iconfinder.com/data/icons/logos-3/600/React.js_logo-64.png', - 'icon-alt': 'React logo', blocks: { bootstrap: { title: 'Bootstrap', @@ -263,13 +244,6 @@ const introSchema = { "In the Data Visualization Certification, you'll build charts, graphs, and maps to present different types of data with the D3.js library.", "You'll also learn about JSON (JavaScript Object Notation), and how to work with data online using an API (Application Programing Interface)." ], - image: - 'https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/Data_re_80ws.svg', - 'image-alt': - 'Three people placing charts and graphs onto a browser interface', - icon: - 'https://camo.githubusercontent.com/586ccf0aad9684edc821658cee04146cf36d1f1d5ec904bbefd72728909ccb2e/68747470733a2f2f64336a732e6f72672f6c6f676f2e737667', - 'icon-alt': 'D3 logo', blocks: { 'data-visualization-with-d3': { title: 'Data Visualization with D3', @@ -308,12 +282,6 @@ const introSchema = { 'Today, one of the popular ways to build applications is through microservices, which are small, modular applications that work together to form a larger whole.', "In the APIs and Microservices Certification, you'll learn how to write back end-ready with Node.js and npm (Node Package Manager). You'll also build web applications with the Express framework, and build a People Finder microservice with MongoDB and the Mongoose library." ], - image: - 'https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/server_status_5pbv.svg', - 'image-alt': 'A person standing next to a database icon larger than her', - icon: - 'https://cdn0.iconfinder.com/data/icons/seo-web-4-1/128/Vigor_Cloud-Server-Database-Hosting-64.png', - 'icon-alt': 'A server in front of a cloud.', blocks: { 'managing-packages-with-npm': { title: 'Managing Packages with NPM', @@ -355,12 +323,6 @@ const introSchema = { "In the Quality Assurance Certification, you'll learn how to write to write tests with Chai to ensure your applications work the way you expect them to.", "Then you'll build a chat application to learn advanced Node and Express concepts. You'll also use Pug as a template engine, Passport for authentication, and Socket.io for real-time communication between the server and connected clients." ], - image: - 'https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/usability_testing_2xs4.svg', - 'image-alt': 'Two people interacting with a website', - icon: - 'https://cdn1.iconfinder.com/data/icons/smallicons-misc/32/clipboard-64.png', - 'icon-alt': 'A clipboard with a bulleted list.', blocks: { 'quality-assurance-and-testing-with-chai': { title: 'Quality Assurance and Testing with Chai', @@ -393,12 +355,6 @@ const introSchema = { 'Python is one of the most popular, flexible programming languages today. You can use it for everything from basic scripting to machine learning.', "In the Scientific Computing with Python Certification, you'll Python fundamentals like variables, loops, conditionals, and functions. Then you'll quickly ramp up to complex data structures, networking, relational databases, and data visualization." ], - image: - 'https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/pair_programming_njlp.svg', - 'image-alt': 'Two people sitting in front of a computer', - icon: - 'https://cdn4.iconfinder.com/data/icons/logos-and-brands/512/267_Python_logo-64.png', - 'icon-alt': 'Python logo', blocks: { 'python-for-everybody': { title: 'Python for Everybody', @@ -421,12 +377,6 @@ const introSchema = { 'Data Analysis has been around for a long time. But up until a few years ago, developers practiced it using expensive, closed-source tools like Tableau. But recently, Python, SQL, and other open libraries have changed Data Analysis forever.', "In the Data Analysis with Python Certification, you'll learn the fundamentals of data analysis with Python. By the end of this certification, you'll know how to read data from sources like CSVs and SQL, and how to use libraries like Numpy, Pandas, Matplotlib, and Seaborn to process and visualize data." ], - image: - 'https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/design_data_khdb.svg', - 'image-alt': 'A person looking at various charts', - icon: - 'https://cdn0.iconfinder.com/data/icons/seo-web-4-1/128/Vigor_Analytics-Graph-Statistics-64.png', - 'icon-alt': 'A line graph', blocks: { 'data-analysis-with-python-course': { title: 'Data Analysis with Python', @@ -458,12 +408,6 @@ const introSchema = { "With the Information Security Certification, you'll build a secure web app with HelmetJS to learn the fundamentals of protecting people's information online.", "You'll also build a TCP client, and an Nmap and port scanner in Python. This will help you learn the basics of penetration testing — an important component of good information security." ], - image: - 'https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/security_o890.svg', - 'image-alt': 'A person standing in front of a browser with a padlock', - icon: - 'https://cdn1.iconfinder.com/data/icons/unigrid-phantom-security-vol-1/60/013_005_shield_protect_protection_security_secure_guard_guardian_defense_firewall_5-64.png', - 'icon-alt': 'Green shield logo', blocks: { 'information-security-with-helmetjs': { title: 'Information Security with HelmetJS', @@ -495,11 +439,6 @@ const introSchema = { "In the Machine Learning with Python Certification, you'll use the TensorFlow framework to build several neural networks. A you'll explore more advanced techniques like natural language processing and reinforcement learning.", "You'll also dive into neural networks, and learn the principles behind how deep, recurrent, and convolutional neural networks work." ], - image: - 'https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/Artificial_intelligence_re_enpp.svg', - 'image-alt': 'A person holding a cell phone standing next to a robot', - icon: 'https://www.kubeflow.org/docs/images/logos/TensorFlow.png', - 'icon-alt': 'TensorFlow logo', blocks: { tensorflow: { title: 'Tensorflow', @@ -529,13 +468,6 @@ const introSchema = { "If you're looking for free coding exercises to prepare for your next job interview, we've got you covered.", 'This section contains hundreds of coding challenges that test your knowledge of algorithms, data structures, and mathematics. It also has a number of take-home projects you can use to strengthen your skills, or add to your portfolio.' ], - image: - 'https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/software_engineer_lvl5.svg', - 'image-alt': - 'A person sitting at a computer with a data structure in the background', - icon: - 'https://cdn1.iconfinder.com/data/icons/data-science-flat-1/64/neural-network-machine-learning-algorithm-64.png', - 'icon-alt': 'Algorithm, creative shape icon', blocks: { algorithms: { title: 'Algorithms', @@ -578,9 +510,9 @@ const introSchema = { certification: '{{cert}} Certification', 'browse-other': 'Browse our other free certifications\n(we recommend doing these in order)', - courses: 'courses', - 'section-courses': '{{section}} courses' + courses: 'Courses', + expand: 'Expand', + collapse: 'Collapse' } }; - exports.introSchema = introSchema; diff --git a/client/i18n/locales/chinese/intro.json b/client/i18n/locales/chinese/intro.json index 3b53c44832..1dbf447d8b 100644 --- a/client/i18n/locales/chinese/intro.json +++ b/client/i18n/locales/chinese/intro.json @@ -6,10 +6,6 @@ "First, you'll build a cat photo app to learn the basics of HTML and CSS. Later, you'll learn modern techniques like CSS variables by building a penguin, and best practices for accessibility by building a web form.", "Finally, you'll learn how to make webpages that respond to different screen sizes by building a Twitter card with Flexbox, and a complex blog layout with CSS Grid." ], - "image": "https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/building_websites_i78t.svg", - "image-alt": "Three people designing a responsive website layout together", - "icon": "https://cdn3.iconfinder.com/data/icons/seo-web-5-1/128/Vigor_responsive-web-design-adaptive-64.png", - "icon-alt": "A computer monitor with the desktop view and a smartphone with the mobile view of the same website.", "blocks": { "basic-html-and-html5": { "title": "Basic HTML and HTML5", @@ -88,10 +84,6 @@ "Once you have the fundamentals down, you'll apply that knowledge by creating algorithms to manipulate strings, factorialize numbers, and even calculate the orbit of the International Space Station.", "Along the way, you'll also learn two important programing styles or paradigms: Object Oriented Programing (OOP), and Functional Programing (FP)." ], - "image": "https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/dev_focus_b9xo.svg", - "image-alt": "A person working on a laptop", - "icon": "https://i2.wp.com/info.widespace.com/wp-content/uploads/2016/03/javascript-shield-logo.png?ssl=1", - "icon-alt": "JavaScript shield logo", "blocks": { "basic-javascript": { "title": "Basic JavaScript", @@ -186,10 +178,6 @@ "In the Front End Libraries Certification, you'll learn how to style your site quickly with Bootstrap. You'll also learn how add logic to your CSS styles and extend them with Sass.", "Later, you'll build a shopping cart and other applications to learn how to create powerful Single Page Applications (SPAs) with React and Redux." ], - "image": "https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/react_y7wq.svg", - "image-alt": "A person sitting atop the react logo", - "icon": "https://cdn4.iconfinder.com/data/icons/logos-3/600/React.js_logo-64.png", - "icon-alt": "React logo", "blocks": { "bootstrap": { "title": "Bootstrap", @@ -252,10 +240,6 @@ "In the Data Visualization Certification, you'll build charts, graphs, and maps to present different types of data with the D3.js library.", "You'll also learn about JSON (JavaScript Object Notation), and how to work with data online using an API (Application Programing Interface)." ], - "image": "https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/Data_re_80ws.svg", - "image-alt": "Three people placing charts and graphs onto a browser interface", - "icon": "https://camo.githubusercontent.com/586ccf0aad9684edc821658cee04146cf36d1f1d5ec904bbefd72728909ccb2e/68747470733a2f2f64336a732e6f72672f6c6f676f2e737667", - "icon-alt": "D3 logo", "blocks": { "data-visualization-with-d3": { "title": "Data Visualization with D3", @@ -294,10 +278,6 @@ "Today, one of the popular ways to build applications is through microservices, which are small, modular applications that work together to form a larger whole.", "In the APIs and Microservices Certification, you'll learn how to write back end-ready with Node.js and npm (Node Package Manager). You'll also build web applications with the Express framework, and build a People Finder microservice with MongoDB and the Mongoose library." ], - "image": "https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/server_status_5pbv.svg", - "image-alt": "A person standing next to a database icon larger than her", - "icon": "https://cdn0.iconfinder.com/data/icons/seo-web-4-1/128/Vigor_Cloud-Server-Database-Hosting-64.png", - "icon-alt": "A server in front of a cloud.", "blocks": { "managing-packages-with-npm": { "title": "Managing Packages with NPM", @@ -339,10 +319,6 @@ "In the Quality Assurance Certification, you'll learn how to write to write tests with Chai to ensure your applications work the way you expect them to.", "Then you'll build a chat application to learn advanced Node and Express concepts. You'll also use Pug as a template engine, Passport for authentication, and Socket.io for real-time communication between the server and connected clients." ], - "image": "https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/usability_testing_2xs4.svg", - "image-alt": "Two people interacting with a website", - "icon": "https://cdn1.iconfinder.com/data/icons/smallicons-misc/32/clipboard-64.png", - "icon-alt": "A clipboard with a bulleted list.", "blocks": { "quality-assurance-and-testing-with-chai": { "title": "Quality Assurance and Testing with Chai", @@ -375,10 +351,6 @@ "Python is one of the most popular, flexible programming languages today. You can use it for everything from basic scripting to machine learning.", "In the Scientific Computing with Python Certification, you'll Python fundamentals like variables, loops, conditionals, and functions. Then you'll quickly ramp up to complex data structures, networking, relational databases, and data visualization." ], - "image": "https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/pair_programming_njlp.svg", - "image-alt": "Two people sitting in front of a computer", - "icon": "https://cdn4.iconfinder.com/data/icons/logos-and-brands/512/267_Python_logo-64.png", - "icon-alt": "Python logo", "blocks": { "python-for-everybody": { "title": "Python for Everybody", @@ -401,10 +373,6 @@ "Data Analysis has been around for a long time. But up until a few years ago, developers practiced it using expensive, closed-source tools like Tableau. But recently, Python, SQL, and other open libraries have changed Data Analysis forever.", "In the Data Analysis with Python Certification, you'll learn the fundamentals of data analysis with Python. By the end of this certification, you'll know how to read data from sources like CSVs and SQL, and how to use libraries like Numpy, Pandas, Matplotlib, and Seaborn to process and visualize data." ], - "image": "https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/design_data_khdb.svg", - "image-alt": "A person looking at various charts", - "icon": "https://cdn0.iconfinder.com/data/icons/seo-web-4-1/128/Vigor_Analytics-Graph-Statistics-64.png", - "icon-alt": "A line graph", "blocks": { "data-analysis-with-python-course": { "title": "Data Analysis with Python", @@ -436,10 +404,6 @@ "With the Information Security Certification, you'll build a secure web app with HelmetJS to learn the fundamentals of protecting people's information online.", "You'll also build a TCP client, and an Nmap and port scanner in Python. This will help you learn the basics of penetration testing — an important component of good information security." ], - "image": "https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/security_o890.svg", - "image-alt": "A person standing in front of a browser with a padlock", - "icon": "https://cdn1.iconfinder.com/data/icons/unigrid-phantom-security-vol-1/60/013_005_shield_protect_protection_security_secure_guard_guardian_defense_firewall_5-64.png", - "icon-alt": "Green shield logo", "blocks": { "information-security-with-helmetjs": { "title": "Information Security with HelmetJS", @@ -471,10 +435,6 @@ "In the Machine Learning with Python Certification, you'll use the TensorFlow framework to build several neural networks. A you'll explore more advanced techniques like natural language processing and reinforcement learning.", "You'll also dive into neural networks, and learn the principles behind how deep, recurrent, and convolutional neural networks work." ], - "image": "https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/Artificial_intelligence_re_enpp.svg", - "image-alt": "A person holding a cell phone standing next to a robot", - "icon": "https://www.kubeflow.org/docs/images/logos/TensorFlow.png", - "icon-alt": "TensorFlow logo", "blocks": { "tensorflow": { "title": "Tensorflow", @@ -504,10 +464,6 @@ "If you're looking for free coding exercises to prepare for your next job interview, we've got you covered.", "This section contains hundreds of coding challenges that test your knowledge of algorithms, data structures, and mathematics. It also has a number of take-home projects you can use to strengthen your skills, or add to your portfolio." ], - "image": "https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/software_engineer_lvl5.svg", - "image-alt": "A person sitting at a computer with a data structure in the background", - "icon": "https://cdn1.iconfinder.com/data/icons/data-science-flat-1/64/neural-network-machine-learning-algorithm-64.png", - "icon-alt": "Algorithm, creative shape icon", "blocks": { "algorithms": { "title": "Algorithms", @@ -549,7 +505,8 @@ "misc-text": { "certification": "{{cert}} Certification", "browse-other": "Browse our other free certifications\n(we recommend doing these in order)", - "courses": "courses", - "section-courses": "{{section}} courses" + "courses": "Courses", + "expand": "Expand", + "collapse": "Collapse" } } diff --git a/client/i18n/locales/chinese/translations.json b/client/i18n/locales/chinese/translations.json index 427e0ed4ca..554d94a03c 100644 --- a/client/i18n/locales/chinese/translations.json +++ b/client/i18n/locales/chinese/translations.json @@ -404,7 +404,18 @@ "initial": "初始", "info": "介绍信息", "spacer": "间隔", - "toggle": "切换选中标记" + "toggle": "切换选中标记", + "responsive-design": "Laptop and mobile phone icon", + "javascript": "JavaScript icon", + "react": "React icon", + "d3": "D3 icon", + "api": "A stack of servers", + "clipboard": "A clipboard with a checkmark", + "python": "Python icon", + "analytics": "A bar chart and line graph", + "shield": "A shield with a checkmark", + "tensorflow": "Tensorflow icon", + "algorithm": "Branching nodes" }, "aria": { "fcc-logo": "freeCodeCamp Logo", diff --git a/client/i18n/locales/english/intro.json b/client/i18n/locales/english/intro.json index 6f3ff08613..1dbf447d8b 100644 --- a/client/i18n/locales/english/intro.json +++ b/client/i18n/locales/english/intro.json @@ -6,10 +6,6 @@ "First, you'll build a cat photo app to learn the basics of HTML and CSS. Later, you'll learn modern techniques like CSS variables by building a penguin, and best practices for accessibility by building a web form.", "Finally, you'll learn how to make webpages that respond to different screen sizes by building a Twitter card with Flexbox, and a complex blog layout with CSS Grid." ], - "image": "https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/building_websites_i78t.svg", - "image-alt": "Three people designing a responsive website layout together", - "icon": "https://cdn3.iconfinder.com/data/icons/seo-web-5-1/128/Vigor_responsive-web-design-adaptive-64.png", - "icon-alt": "A computer monitor with the desktop view and a smartphone with the mobile view of the same website.", "blocks": { "basic-html-and-html5": { "title": "Basic HTML and HTML5", @@ -88,10 +84,6 @@ "Once you have the fundamentals down, you'll apply that knowledge by creating algorithms to manipulate strings, factorialize numbers, and even calculate the orbit of the International Space Station.", "Along the way, you'll also learn two important programing styles or paradigms: Object Oriented Programing (OOP), and Functional Programing (FP)." ], - "image": "https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/dev_focus_b9xo.svg", - "image-alt": "A person working on a laptop", - "icon": "https://i2.wp.com/info.widespace.com/wp-content/uploads/2016/03/javascript-shield-logo.png?ssl=1", - "icon-alt": "JavaScript shield logo", "blocks": { "basic-javascript": { "title": "Basic JavaScript", @@ -186,10 +178,6 @@ "In the Front End Libraries Certification, you'll learn how to style your site quickly with Bootstrap. You'll also learn how add logic to your CSS styles and extend them with Sass.", "Later, you'll build a shopping cart and other applications to learn how to create powerful Single Page Applications (SPAs) with React and Redux." ], - "image": "https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/react_y7wq.svg", - "image-alt": "A person sitting atop the react logo", - "icon": "https://cdn4.iconfinder.com/data/icons/logos-3/600/React.js_logo-64.png", - "icon-alt": "React logo", "blocks": { "bootstrap": { "title": "Bootstrap", @@ -252,10 +240,6 @@ "In the Data Visualization Certification, you'll build charts, graphs, and maps to present different types of data with the D3.js library.", "You'll also learn about JSON (JavaScript Object Notation), and how to work with data online using an API (Application Programing Interface)." ], - "image": "https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/Data_re_80ws.svg", - "image-alt": "Three people placing charts and graphs onto a browser interface", - "icon": "https://camo.githubusercontent.com/586ccf0aad9684edc821658cee04146cf36d1f1d5ec904bbefd72728909ccb2e/68747470733a2f2f64336a732e6f72672f6c6f676f2e737667", - "icon-alt": "D3 logo", "blocks": { "data-visualization-with-d3": { "title": "Data Visualization with D3", @@ -294,10 +278,6 @@ "Today, one of the popular ways to build applications is through microservices, which are small, modular applications that work together to form a larger whole.", "In the APIs and Microservices Certification, you'll learn how to write back end-ready with Node.js and npm (Node Package Manager). You'll also build web applications with the Express framework, and build a People Finder microservice with MongoDB and the Mongoose library." ], - "image": "https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/server_status_5pbv.svg", - "image-alt": "A person standing next to a database icon larger than her", - "icon": "https://cdn0.iconfinder.com/data/icons/seo-web-4-1/128/Vigor_Cloud-Server-Database-Hosting-64.png", - "icon-alt": "A server in front of a cloud.", "blocks": { "managing-packages-with-npm": { "title": "Managing Packages with NPM", @@ -339,10 +319,6 @@ "In the Quality Assurance Certification, you'll learn how to write to write tests with Chai to ensure your applications work the way you expect them to.", "Then you'll build a chat application to learn advanced Node and Express concepts. You'll also use Pug as a template engine, Passport for authentication, and Socket.io for real-time communication between the server and connected clients." ], - "image": "https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/usability_testing_2xs4.svg", - "image-alt": "Two people interacting with a website", - "icon": "https://cdn1.iconfinder.com/data/icons/smallicons-misc/32/clipboard-64.png", - "icon-alt": "A clipboard with a bulleted list.", "blocks": { "quality-assurance-and-testing-with-chai": { "title": "Quality Assurance and Testing with Chai", @@ -375,10 +351,6 @@ "Python is one of the most popular, flexible programming languages today. You can use it for everything from basic scripting to machine learning.", "In the Scientific Computing with Python Certification, you'll Python fundamentals like variables, loops, conditionals, and functions. Then you'll quickly ramp up to complex data structures, networking, relational databases, and data visualization." ], - "image": "https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/pair_programming_njlp.svg", - "image-alt": "Two people sitting in front of a computer", - "icon": "https://cdn4.iconfinder.com/data/icons/logos-and-brands/512/267_Python_logo-64.png", - "icon-alt": "Python logo", "blocks": { "python-for-everybody": { "title": "Python for Everybody", @@ -401,10 +373,6 @@ "Data Analysis has been around for a long time. But up until a few years ago, developers practiced it using expensive, closed-source tools like Tableau. But recently, Python, SQL, and other open libraries have changed Data Analysis forever.", "In the Data Analysis with Python Certification, you'll learn the fundamentals of data analysis with Python. By the end of this certification, you'll know how to read data from sources like CSVs and SQL, and how to use libraries like Numpy, Pandas, Matplotlib, and Seaborn to process and visualize data." ], - "image": "https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/design_data_khdb.svg", - "image-alt": "A person looking at various charts", - "icon": "https://cdn0.iconfinder.com/data/icons/seo-web-4-1/128/Vigor_Analytics-Graph-Statistics-64.png", - "icon-alt": "A line graph", "blocks": { "data-analysis-with-python-course": { "title": "Data Analysis with Python", @@ -436,10 +404,6 @@ "With the Information Security Certification, you'll build a secure web app with HelmetJS to learn the fundamentals of protecting people's information online.", "You'll also build a TCP client, and an Nmap and port scanner in Python. This will help you learn the basics of penetration testing — an important component of good information security." ], - "image": "https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/security_o890.svg", - "image-alt": "A person standing in front of a browser with a padlock", - "icon": "https://cdn1.iconfinder.com/data/icons/unigrid-phantom-security-vol-1/60/013_005_shield_protect_protection_security_secure_guard_guardian_defense_firewall_5-64.png", - "icon-alt": "Green shield logo", "blocks": { "information-security-with-helmetjs": { "title": "Information Security with HelmetJS", @@ -471,10 +435,6 @@ "In the Machine Learning with Python Certification, you'll use the TensorFlow framework to build several neural networks. A you'll explore more advanced techniques like natural language processing and reinforcement learning.", "You'll also dive into neural networks, and learn the principles behind how deep, recurrent, and convolutional neural networks work." ], - "image": "https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/Artificial_intelligence_re_enpp.svg", - "image-alt": "A person holding a cell phone standing next to a robot", - "icon": "https://www.kubeflow.org/docs/images/logos/TensorFlow.png", - "icon-alt": "TensorFlow logo", "blocks": { "tensorflow": { "title": "Tensorflow", @@ -504,10 +464,6 @@ "If you're looking for free coding exercises to prepare for your next job interview, we've got you covered.", "This section contains hundreds of coding challenges that test your knowledge of algorithms, data structures, and mathematics. It also has a number of take-home projects you can use to strengthen your skills, or add to your portfolio." ], - "image": "https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/software_engineer_lvl5.svg", - "image-alt": "A person sitting at a computer with a data structure in the background", - "icon": "https://cdn1.iconfinder.com/data/icons/data-science-flat-1/64/neural-network-machine-learning-algorithm-64.png", - "icon-alt": "Algorithm, creative shape icon", "blocks": { "algorithms": { "title": "Algorithms", @@ -550,6 +506,7 @@ "certification": "{{cert}} Certification", "browse-other": "Browse our other free certifications\n(we recommend doing these in order)", "courses": "Courses", - "section-courses": "{{section}} Courses" + "expand": "Expand", + "collapse": "Collapse" } } diff --git a/client/i18n/locales/english/translations.json b/client/i18n/locales/english/translations.json index 6003040630..96d48db7ba 100644 --- a/client/i18n/locales/english/translations.json +++ b/client/i18n/locales/english/translations.json @@ -406,7 +406,18 @@ "initial": "Initial", "info": "Intro Information", "spacer": "Spacer", - "toggle": "Toggle Checkmark" + "toggle": "Toggle Checkmark", + "responsive-design": "Laptop and mobile phone icon", + "javascript": "JavaScript icon", + "react": "React icon", + "d3": "D3 icon", + "api": "A stack of servers", + "clipboard": "A clipboard with a checkmark", + "python": "Python icon", + "analytics": "A bar chart and line graph", + "shield": "A shield with a checkmark", + "tensorflow": "Tensorflow icon", + "algorithm": "Branching nodes" }, "aria": { "fcc-logo": "freeCodeCamp Logo", diff --git a/client/i18n/locales/espanol/intro.json b/client/i18n/locales/espanol/intro.json index 3b53c44832..1dbf447d8b 100644 --- a/client/i18n/locales/espanol/intro.json +++ b/client/i18n/locales/espanol/intro.json @@ -6,10 +6,6 @@ "First, you'll build a cat photo app to learn the basics of HTML and CSS. Later, you'll learn modern techniques like CSS variables by building a penguin, and best practices for accessibility by building a web form.", "Finally, you'll learn how to make webpages that respond to different screen sizes by building a Twitter card with Flexbox, and a complex blog layout with CSS Grid." ], - "image": "https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/building_websites_i78t.svg", - "image-alt": "Three people designing a responsive website layout together", - "icon": "https://cdn3.iconfinder.com/data/icons/seo-web-5-1/128/Vigor_responsive-web-design-adaptive-64.png", - "icon-alt": "A computer monitor with the desktop view and a smartphone with the mobile view of the same website.", "blocks": { "basic-html-and-html5": { "title": "Basic HTML and HTML5", @@ -88,10 +84,6 @@ "Once you have the fundamentals down, you'll apply that knowledge by creating algorithms to manipulate strings, factorialize numbers, and even calculate the orbit of the International Space Station.", "Along the way, you'll also learn two important programing styles or paradigms: Object Oriented Programing (OOP), and Functional Programing (FP)." ], - "image": "https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/dev_focus_b9xo.svg", - "image-alt": "A person working on a laptop", - "icon": "https://i2.wp.com/info.widespace.com/wp-content/uploads/2016/03/javascript-shield-logo.png?ssl=1", - "icon-alt": "JavaScript shield logo", "blocks": { "basic-javascript": { "title": "Basic JavaScript", @@ -186,10 +178,6 @@ "In the Front End Libraries Certification, you'll learn how to style your site quickly with Bootstrap. You'll also learn how add logic to your CSS styles and extend them with Sass.", "Later, you'll build a shopping cart and other applications to learn how to create powerful Single Page Applications (SPAs) with React and Redux." ], - "image": "https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/react_y7wq.svg", - "image-alt": "A person sitting atop the react logo", - "icon": "https://cdn4.iconfinder.com/data/icons/logos-3/600/React.js_logo-64.png", - "icon-alt": "React logo", "blocks": { "bootstrap": { "title": "Bootstrap", @@ -252,10 +240,6 @@ "In the Data Visualization Certification, you'll build charts, graphs, and maps to present different types of data with the D3.js library.", "You'll also learn about JSON (JavaScript Object Notation), and how to work with data online using an API (Application Programing Interface)." ], - "image": "https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/Data_re_80ws.svg", - "image-alt": "Three people placing charts and graphs onto a browser interface", - "icon": "https://camo.githubusercontent.com/586ccf0aad9684edc821658cee04146cf36d1f1d5ec904bbefd72728909ccb2e/68747470733a2f2f64336a732e6f72672f6c6f676f2e737667", - "icon-alt": "D3 logo", "blocks": { "data-visualization-with-d3": { "title": "Data Visualization with D3", @@ -294,10 +278,6 @@ "Today, one of the popular ways to build applications is through microservices, which are small, modular applications that work together to form a larger whole.", "In the APIs and Microservices Certification, you'll learn how to write back end-ready with Node.js and npm (Node Package Manager). You'll also build web applications with the Express framework, and build a People Finder microservice with MongoDB and the Mongoose library." ], - "image": "https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/server_status_5pbv.svg", - "image-alt": "A person standing next to a database icon larger than her", - "icon": "https://cdn0.iconfinder.com/data/icons/seo-web-4-1/128/Vigor_Cloud-Server-Database-Hosting-64.png", - "icon-alt": "A server in front of a cloud.", "blocks": { "managing-packages-with-npm": { "title": "Managing Packages with NPM", @@ -339,10 +319,6 @@ "In the Quality Assurance Certification, you'll learn how to write to write tests with Chai to ensure your applications work the way you expect them to.", "Then you'll build a chat application to learn advanced Node and Express concepts. You'll also use Pug as a template engine, Passport for authentication, and Socket.io for real-time communication between the server and connected clients." ], - "image": "https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/usability_testing_2xs4.svg", - "image-alt": "Two people interacting with a website", - "icon": "https://cdn1.iconfinder.com/data/icons/smallicons-misc/32/clipboard-64.png", - "icon-alt": "A clipboard with a bulleted list.", "blocks": { "quality-assurance-and-testing-with-chai": { "title": "Quality Assurance and Testing with Chai", @@ -375,10 +351,6 @@ "Python is one of the most popular, flexible programming languages today. You can use it for everything from basic scripting to machine learning.", "In the Scientific Computing with Python Certification, you'll Python fundamentals like variables, loops, conditionals, and functions. Then you'll quickly ramp up to complex data structures, networking, relational databases, and data visualization." ], - "image": "https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/pair_programming_njlp.svg", - "image-alt": "Two people sitting in front of a computer", - "icon": "https://cdn4.iconfinder.com/data/icons/logos-and-brands/512/267_Python_logo-64.png", - "icon-alt": "Python logo", "blocks": { "python-for-everybody": { "title": "Python for Everybody", @@ -401,10 +373,6 @@ "Data Analysis has been around for a long time. But up until a few years ago, developers practiced it using expensive, closed-source tools like Tableau. But recently, Python, SQL, and other open libraries have changed Data Analysis forever.", "In the Data Analysis with Python Certification, you'll learn the fundamentals of data analysis with Python. By the end of this certification, you'll know how to read data from sources like CSVs and SQL, and how to use libraries like Numpy, Pandas, Matplotlib, and Seaborn to process and visualize data." ], - "image": "https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/design_data_khdb.svg", - "image-alt": "A person looking at various charts", - "icon": "https://cdn0.iconfinder.com/data/icons/seo-web-4-1/128/Vigor_Analytics-Graph-Statistics-64.png", - "icon-alt": "A line graph", "blocks": { "data-analysis-with-python-course": { "title": "Data Analysis with Python", @@ -436,10 +404,6 @@ "With the Information Security Certification, you'll build a secure web app with HelmetJS to learn the fundamentals of protecting people's information online.", "You'll also build a TCP client, and an Nmap and port scanner in Python. This will help you learn the basics of penetration testing — an important component of good information security." ], - "image": "https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/security_o890.svg", - "image-alt": "A person standing in front of a browser with a padlock", - "icon": "https://cdn1.iconfinder.com/data/icons/unigrid-phantom-security-vol-1/60/013_005_shield_protect_protection_security_secure_guard_guardian_defense_firewall_5-64.png", - "icon-alt": "Green shield logo", "blocks": { "information-security-with-helmetjs": { "title": "Information Security with HelmetJS", @@ -471,10 +435,6 @@ "In the Machine Learning with Python Certification, you'll use the TensorFlow framework to build several neural networks. A you'll explore more advanced techniques like natural language processing and reinforcement learning.", "You'll also dive into neural networks, and learn the principles behind how deep, recurrent, and convolutional neural networks work." ], - "image": "https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/Artificial_intelligence_re_enpp.svg", - "image-alt": "A person holding a cell phone standing next to a robot", - "icon": "https://www.kubeflow.org/docs/images/logos/TensorFlow.png", - "icon-alt": "TensorFlow logo", "blocks": { "tensorflow": { "title": "Tensorflow", @@ -504,10 +464,6 @@ "If you're looking for free coding exercises to prepare for your next job interview, we've got you covered.", "This section contains hundreds of coding challenges that test your knowledge of algorithms, data structures, and mathematics. It also has a number of take-home projects you can use to strengthen your skills, or add to your portfolio." ], - "image": "https://42f2671d685f51e10fc6-b9fcecea3e50b3b59bdc28dead054ebc.ssl.cf5.rackcdn.com/illustrations/software_engineer_lvl5.svg", - "image-alt": "A person sitting at a computer with a data structure in the background", - "icon": "https://cdn1.iconfinder.com/data/icons/data-science-flat-1/64/neural-network-machine-learning-algorithm-64.png", - "icon-alt": "Algorithm, creative shape icon", "blocks": { "algorithms": { "title": "Algorithms", @@ -549,7 +505,8 @@ "misc-text": { "certification": "{{cert}} Certification", "browse-other": "Browse our other free certifications\n(we recommend doing these in order)", - "courses": "courses", - "section-courses": "{{section}} courses" + "courses": "Courses", + "expand": "Expand", + "collapse": "Collapse" } } diff --git a/client/i18n/locales/espanol/translations.json b/client/i18n/locales/espanol/translations.json index c8846a07b2..b86238bc08 100644 --- a/client/i18n/locales/espanol/translations.json +++ b/client/i18n/locales/espanol/translations.json @@ -406,7 +406,18 @@ "initial": "Inicial", "info": "Información de introducción", "spacer": "Espaciador", - "toggle": "Alternar marca de verificación" + "toggle": "Alternar marca de verificación", + "responsive-design": "Laptop and mobile phone icon", + "javascript": "JavaScript icon", + "react": "React icon", + "d3": "D3 icon", + "api": "A stack of servers", + "clipboard": "A clipboard with a checkmark", + "python": "Python icon", + "analytics": "A bar chart and line graph", + "shield": "A shield with a checkmark", + "tensorflow": "Tensorflow icon", + "algorithm": "Branching nodes" }, "aria": { "fcc-logo": "freeCodeCamp Logo", diff --git a/client/i18n/translations-schema.js b/client/i18n/translations-schema.js index e4ea14b1ad..bbd5701b71 100644 --- a/client/i18n/translations-schema.js +++ b/client/i18n/translations-schema.js @@ -415,7 +415,7 @@ const translationsSchema = { 'bigger-donation': 'Want to make a bigger one-time donation, mail us a check, or give in other ways?', 'other-ways': - "Here are many <0>other ways we could support our non-profit's mission.", + "Here are many <0>other ways you can support our non-profit's mission.", 'other-ways-url': 'https://www.freecodecamp.org/news/how-to-donate-to-free-code-camp', 'failed-pay': @@ -477,7 +477,18 @@ const translationsSchema = { initial: 'Initial', info: 'Intro Information', spacer: 'Spacer', - toggle: 'Toggle Checkmark' + toggle: 'Toggle Checkmark', + 'responsive-design': 'Laptop and mobile phone icon', + javascript: 'JavaScript icon', + react: 'React icon', + d3: 'D3 icon', + api: 'A stack of servers', + clipboard: 'A clipboard with a checkmark', + python: 'Python icon', + analytics: 'A bar chart and line graph', + shield: 'A shield with a checkmark', + tensorflow: 'Tensorflow icon', + algorithm: 'Branching nodes' }, aria: { 'fcc-logo': 'freeCodeCamp Logo', diff --git a/client/src/assets/icons/APIIcon.js b/client/src/assets/icons/APIIcon.js new file mode 100644 index 0000000000..c798554d83 --- /dev/null +++ b/client/src/assets/icons/APIIcon.js @@ -0,0 +1,19 @@ +import React, { Fragment } from 'react'; +import { useTranslation } from 'react-i18next'; + +function APIIcon(props) { + const { t } = useTranslation(); + + return ( + + {t('icons.api')} + + + + + ); +} + +APIIcon.displayName = 'APIIcon'; + +export default APIIcon; diff --git a/client/src/assets/icons/Algorithm.js b/client/src/assets/icons/Algorithm.js new file mode 100644 index 0000000000..3b4ec28558 --- /dev/null +++ b/client/src/assets/icons/Algorithm.js @@ -0,0 +1,19 @@ +import React, { Fragment } from 'react'; +import { useTranslation } from 'react-i18next'; + +function Algorithm(props) { + const { t } = useTranslation(); + + return ( + + {t('icons.algorithm')} + + + + + ); +} + +Algorithm.displayName = 'Algorithm'; + +export default Algorithm; diff --git a/client/src/assets/icons/Analytics.js b/client/src/assets/icons/Analytics.js new file mode 100644 index 0000000000..3d1263b173 --- /dev/null +++ b/client/src/assets/icons/Analytics.js @@ -0,0 +1,19 @@ +import React, { Fragment } from 'react'; +import { useTranslation } from 'react-i18next'; + +function Analytics(props) { + const { t } = useTranslation(); + + return ( + + {t('icons.analytics')} + + + + + ); +} + +Analytics.displayName = 'Analytics'; + +export default Analytics; diff --git a/client/src/assets/icons/Clipboard.js b/client/src/assets/icons/Clipboard.js new file mode 100644 index 0000000000..f9a76382fd --- /dev/null +++ b/client/src/assets/icons/Clipboard.js @@ -0,0 +1,19 @@ +import React, { Fragment } from 'react'; +import { useTranslation } from 'react-i18next'; + +function Clipboard(props) { + const { t } = useTranslation(); + + return ( + + {t('icons.clipboard')} + + + + + ); +} + +Clipboard.displayName = 'Clipboard'; + +export default Clipboard; diff --git a/client/src/assets/icons/D3Icon.js b/client/src/assets/icons/D3Icon.js new file mode 100644 index 0000000000..3e7a8341e2 --- /dev/null +++ b/client/src/assets/icons/D3Icon.js @@ -0,0 +1,23 @@ +import React, { Fragment } from 'react'; +import { useTranslation } from 'react-i18next'; + +function D3Icon(props) { + const { t } = useTranslation(); + + return ( + + {t('icons.d3')} + + + + + ); +} + +D3Icon.displayName = 'D3'; + +export default D3Icon; diff --git a/client/src/assets/icons/JavaScriptIcon.js b/client/src/assets/icons/JavaScriptIcon.js new file mode 100644 index 0000000000..00afba058e --- /dev/null +++ b/client/src/assets/icons/JavaScriptIcon.js @@ -0,0 +1,19 @@ +import React, { Fragment } from 'react'; +import { useTranslation } from 'react-i18next'; + +function JavaScriptIcon(props) { + const { t } = useTranslation(); + + return ( + + {t('icons.javascript')} + + + + + ); +} + +JavaScriptIcon.displayName = 'JavaScriptIcon'; + +export default JavaScriptIcon; diff --git a/client/src/assets/icons/PythonIcon.js b/client/src/assets/icons/PythonIcon.js new file mode 100644 index 0000000000..a9f562ff7e --- /dev/null +++ b/client/src/assets/icons/PythonIcon.js @@ -0,0 +1,19 @@ +import React, { Fragment } from 'react'; +import { useTranslation } from 'react-i18next'; + +function PythonIcon(props) { + const { t } = useTranslation(); + + return ( + + {t('icons.python')} + + + + + ); +} + +PythonIcon.displayName = 'PythonIcon'; + +export default PythonIcon; diff --git a/client/src/assets/icons/ReactIcon.js b/client/src/assets/icons/ReactIcon.js new file mode 100644 index 0000000000..037a66d193 --- /dev/null +++ b/client/src/assets/icons/ReactIcon.js @@ -0,0 +1,19 @@ +import React, { Fragment } from 'react'; +import { useTranslation } from 'react-i18next'; + +function ReactIcon(props) { + const { t } = useTranslation(); + + return ( + + {t('icons.react')} + + + + + ); +} + +ReactIcon.displayName = 'ReactIcon'; + +export default ReactIcon; diff --git a/client/src/assets/icons/ResponsiveDesign.js b/client/src/assets/icons/ResponsiveDesign.js new file mode 100644 index 0000000000..e32cb6f302 --- /dev/null +++ b/client/src/assets/icons/ResponsiveDesign.js @@ -0,0 +1,19 @@ +import React, { Fragment } from 'react'; +import { useTranslation } from 'react-i18next'; + +function ResponsiveDesign(props) { + const { t } = useTranslation(); + + return ( + + {t('icons.responsive-design')} + + + + + ); +} + +ResponsiveDesign.displayName = 'ResponsiveDesign'; + +export default ResponsiveDesign; diff --git a/client/src/assets/icons/Shield.js b/client/src/assets/icons/Shield.js new file mode 100644 index 0000000000..dcfbc2d09f --- /dev/null +++ b/client/src/assets/icons/Shield.js @@ -0,0 +1,19 @@ +import React, { Fragment } from 'react'; +import { useTranslation } from 'react-i18next'; + +function Shield(props) { + const { t } = useTranslation(); + + return ( + + {t('icons.shield')} + + + + + ); +} + +Shield.displayName = 'Shield'; + +export default Shield; diff --git a/client/src/assets/icons/TensorflowIcon.js b/client/src/assets/icons/TensorflowIcon.js new file mode 100644 index 0000000000..acc0f31321 --- /dev/null +++ b/client/src/assets/icons/TensorflowIcon.js @@ -0,0 +1,19 @@ +import React, { Fragment } from 'react'; +import { useTranslation } from 'react-i18next'; + +function TensorflowIcon(props) { + const { t } = useTranslation(); + + return ( + + {t('icons.tensorflow')} + + + + + ); +} + +TensorflowIcon.displayName = 'TensorflowIcon'; + +export default TensorflowIcon; diff --git a/client/src/assets/icons/index.js b/client/src/assets/icons/index.js new file mode 100644 index 0000000000..83d5a41ae7 --- /dev/null +++ b/client/src/assets/icons/index.js @@ -0,0 +1,34 @@ +import React from 'react'; +import ResponsiveDesign from './ResponsiveDesign'; +import JavaScriptIcon from './JavaScriptIcon'; +import ReactIcon from './ReactIcon'; +import D3Icon from './D3Icon'; +import APIIcon from './APIIcon'; +import Clipboard from './Clipboard'; +import PythonIcon from './PythonIcon'; +import Analytics from './Analytics'; +import Shield from './Shield'; +import TensorflowIcon from './TensorflowIcon'; +import Algorithm from './Algorithm'; + +const generateIconComponent = (superBlock, className) => { + const iconMap = { + 'Responsive Web Design': ResponsiveDesign, + 'JavaScript Algorithms and Data Structures': JavaScriptIcon, + 'Front End Libraries': ReactIcon, + 'Data Visualization': D3Icon, + 'APIs and Microservices': APIIcon, + 'Quality Assurance': Clipboard, + 'Scientific Computing with Python': PythonIcon, + 'Data Analysis with Python': Analytics, + 'Information Security': Shield, + 'Machine Learning with Python': TensorflowIcon, + 'Coding Interview Prep': Algorithm + }; + // fallback in case super block doesn't exist and for tests + const Icon = iconMap[superBlock] ? iconMap[superBlock] : ResponsiveDesign; + + return ; +}; + +export { generateIconComponent }; diff --git a/client/src/components/Intro/components/IntroDescription.js b/client/src/components/Intro/components/IntroDescription.js index 6820bf7b0a..525dedadc7 100644 --- a/client/src/components/Intro/components/IntroDescription.js +++ b/client/src/components/Intro/components/IntroDescription.js @@ -1,6 +1,5 @@ import React from 'react'; import { Link, Spacer } from '../../helpers'; -import { Col } from '@freecodecamp/react-bootstrap'; import { forumLocation } from '../../../../config/env.json'; import { Trans, useTranslation } from 'react-i18next'; @@ -10,14 +9,7 @@ function IntroDescription() { const { t } = useTranslation(); return ( - +
{t('learn.read-this.heading')}

{t('learn.read-this.p1')}

@@ -40,7 +32,7 @@ function IntroDescription() {

{t('learn.read-this.p12')}

- +
); } diff --git a/client/src/components/Intro/index.js b/client/src/components/Intro/index.js index de6d27698b..0473a00e0a 100644 --- a/client/src/components/Intro/index.js +++ b/client/src/components/Intro/index.js @@ -1,7 +1,6 @@ import React from 'react'; import PropTypes from 'prop-types'; import { Link, Spacer, Loader, FullWidthRow } from '../helpers'; -import { Row, Col } from '@freecodecamp/react-bootstrap'; import { randomQuote } from '../../utils/get-words'; import CurrentChallengeLink from '../helpers/CurrentChallengeLink'; import IntroDescription from './components/IntroDescription'; @@ -41,17 +40,13 @@ function Intro({ const { quote, author } = randomQuote(); return ( <> - - - -

- {name - ? `${t('learn.welcome-1', { name: name })}` - : `${t('learn.welcome-2')}`} -

- - -
+ +

+ {name + ? `${t('learn.welcome-1', { name: name })}` + : `${t('learn.welcome-2')}`} +

+ {t('buttons.update-settings')} @@ -65,49 +60,39 @@ function Intro({ )} - - -
- - {quote} -
- {author} -
-
-
- -
- - {completedChallengeCount < 15 ? ( - - -

- - - -

- - ) : ( - '' - )} -
+
+
+ + {quote} +
+ {author} +
+
+
+
+ {completedChallengeCount < 15 ? ( +
+ +

+ + + +

+
+ ) : ( + '' + )} ); } else { return ( <> - - - -

{t('learn.heading')}

- - - - - - {t('buttons.logged-out-cta-btn')} - -
+ +

{t('learn.heading')}

+ + + + {t('buttons.logged-out-cta-btn')} ); diff --git a/client/src/components/Intro/intro.css b/client/src/components/Intro/intro.css index 01d9a564df..7502422201 100644 --- a/client/src/components/Intro/intro.css +++ b/client/src/components/Intro/intro.css @@ -24,25 +24,23 @@ border: none; } +.intro-description strong, +.intro-description p { + font-family: 'Lato', sans-serif; + font-size: 1.17rem; +} + @media (max-width: 500px) { .quote-partial .blockquote { font-size: 1.2rem; border: none; } + + .intro-description strong, + .intro-description p { + font-size: 1rem; + } } .quote-author { font-style: normal; } - -.intro-description strong, -.intro-description p { - font-family: 'Lato', sans-serif; - font-size: 1rem; -} - -@media (min-width: 500px) { - .intro-description strong, - .intro-description p { - font-size: 1.22rem; - } -} diff --git a/client/src/components/Map/__snapshots__/Map.test.js.snap b/client/src/components/Map/__snapshots__/Map.test.js.snap index af4819124d..8af928ccf5 100644 --- a/client/src/components/Map/__snapshots__/Map.test.js.snap +++ b/client/src/components/Map/__snapshots__/Map.test.js.snap @@ -17,9 +17,20 @@ exports[` snapshot: Map 1`] = `
-
+ + icons.responsive-design + + + +
snapshot: Map 1`] = `
-
+ + icons.responsive-design + + + +
snapshot: Map 1`] = `
-
+ + icons.responsive-design + + + +
snapshot: Map 1`] = `
-
+ + icons.responsive-design + + + +
snapshot: Map 1`] = `
-
+ + icons.responsive-design + + + +
snapshot: Map 1`] = `
-
+ + icons.responsive-design + + + +
snapshot: Map 1`] = `
-
+ + icons.responsive-design + + + +
snapshot: Map 1`] = `
-
+ + icons.responsive-design + + + +
snapshot: Map 1`] = `
-
+ + icons.responsive-design + + + +
snapshot: Map 1`] = `
-
+ + icons.responsive-design + + + +
snapshot: Map 1`] = `
-
+ + icons.responsive-design + + + +
- + {generateIconComponent(node.superBlock, 'map-icon')} {i18next.t(`intro:${dasherize(node.superBlock)}.title`)}
@@ -65,30 +54,21 @@ function renderLandingMap(nodes) { function renderLearnMap(nodes, currentSuperBlock = '') { nodes = nodes.filter(node => node.superBlock !== currentSuperBlock); return ( - - -
    - {nodes.map((node, i) => ( -
  • - -
    - - {createSuperBlockTitle(node.superBlock)} -
    - -
  • - ))} -
- -
+
    + {nodes.map((node, i) => ( +
  • + +
    + {generateIconComponent(node.superBlock, 'map-icon')} + {createSuperBlockTitle(node.superBlock)} +
    + +
  • + ))} +
); } diff --git a/client/src/components/layouts/global.css b/client/src/components/layouts/global.css index ce43ab1291..85a625cb18 100644 --- a/client/src/components/layouts/global.css +++ b/client/src/components/layouts/global.css @@ -297,6 +297,23 @@ fieldset[disabled] .btn-primary.focus { margin-left: 5px; } +.map-icon, +.cert-header-icon { + flex-shrink: 0; + fill: var(--primary-color); +} + +.map-icon { + width: 35px; + margin-right: 20px; +} + +.cert-header-icon { + display: block; + width: 80px; + margin: auto; +} + .link-btn:hover svg { fill: var(--quaternary-background); } @@ -305,6 +322,21 @@ fieldset[disabled] .btn-primary.focus { .link-btn { font-size: 1.1rem; } + .map-icon { + width: 45px; + } + .cert-header-icon { + width: 100px; + } +} + +@media (min-width: 1000px) { + .map-icon { + width: 50px; + } + .cert-header-icon { + width: 120px; + } } .button-group .btn:not(:last-child) { diff --git a/client/src/pages/learn.js b/client/src/pages/learn.js index 2494891139..cd68ecd938 100644 --- a/client/src/pages/learn.js +++ b/client/src/pages/learn.js @@ -1,5 +1,5 @@ import React from 'react'; -import { Grid } from '@freecodecamp/react-bootstrap'; +import { Grid, Row, Col } from '@freecodecamp/react-bootstrap'; import PropTypes from 'prop-types'; import { createSelector } from 'reselect'; import { graphql } from 'gatsby'; @@ -63,16 +63,20 @@ export const LearnPage = ({ - - - + + + + + + + ); diff --git a/client/src/templates/Introduction/SuperBlockIntro.js b/client/src/templates/Introduction/SuperBlockIntro.js index 5aeb07f67e..6d0379f07b 100644 --- a/client/src/templates/Introduction/SuperBlockIntro.js +++ b/client/src/templates/Introduction/SuperBlockIntro.js @@ -1,4 +1,4 @@ -import React, { Fragment, Component } from 'react'; +import React, { Component } from 'react'; import PropTypes from 'prop-types'; import Helmet from 'react-helmet'; import { graphql } from 'gatsby'; @@ -7,7 +7,7 @@ import { connect } from 'react-redux'; import { createSelector } from 'reselect'; import { bindActionCreators } from 'redux'; import { withTranslation } from 'react-i18next'; -import { Row, Col } from '@freecodecamp/react-bootstrap'; +import { Grid, Row, Col } from '@freecodecamp/react-bootstrap'; import Login from '../../components/Header/components/Login'; import Map from '../../components/Map'; @@ -15,7 +15,7 @@ import CertChallenge from './components/CertChallenge'; import SuperBlockIntro from './components/SuperBlockIntro'; import { dasherize } from '../../../../utils/slugs'; import Block from './components/Block'; -import { FullWidthRow, Spacer } from '../../components/helpers'; +import { Spacer } from '../../components/helpers'; import { currentChallengeIdSelector, userFetchStateSelector, @@ -160,54 +160,63 @@ export class SuperBlockIntroductionPage extends Component { {i18nSuperBlock} | freeCodeCamp.org - - - - -

{t(`intro:misc-text.courses`)}

- -
- {blockDashedNames.map(blockDashedName => ( -
+ + + + + +

+ {t(`intro:misc-text.courses`)} +

+ +
+ {blockDashedNames.map(blockDashedName => ( +
+ node.block === blockDashedName + )} + superBlockDashedName={superBlockDashedName} + /> +
+ ))} + {superBlock !== 'Coding Interview Prep' && ( +
+ +
+ )} +
+ {!isSignedIn && ( +
+ + {t('buttons.logged-out-cta-btn')} +
+ )} + +

- node.block === blockDashedName - )} - superBlockDashedName={superBlockDashedName} - /> -

- ))} - {superBlock !== 'Coding Interview Prep' && ( -
- - -
- )} -
- {!isSignedIn && ( - - - {t('buttons.logged-out-cta-btn')} - - - - )} -

- {t(`intro:misc-text.browse-other`)} -

- - - -
+ {t(`intro:misc-text.browse-other`)} + + + + + + + ); } diff --git a/client/src/templates/Introduction/components/Block.js b/client/src/templates/Introduction/components/Block.js index 03560ef779..997d4627df 100644 --- a/client/src/templates/Introduction/components/Block.js +++ b/client/src/templates/Introduction/components/Block.js @@ -123,10 +123,15 @@ export class Block extends Component { ); const blockTitle = blockIntroObj ? blockIntroObj.title : null; const blockIntroArr = blockIntroObj ? blockIntroObj.intro : []; + const { + expand: expandText, + collapse: collapseText, + courses: coursesText + } = t('intro:misc-text'); return isProjectBlock ? (
-

{blockTitle}

+

{blockTitle}

{this.renderBlockIntros(blockIntroArr)} ) : (
-

{blockTitle}

+

{blockTitle}

{this.renderBlockIntros(blockIntroArr)}