diff --git a/assets/i18n/en.json b/assets/i18n/en.json index 392804b8413e..cd8757a7d3e3 100644 --- a/assets/i18n/en.json +++ b/assets/i18n/en.json @@ -1579,20 +1579,71 @@ "I18N_SUBTOPIC_sWBXKH4PZcK6_subtracting-numbers_TITLE": "Subtracting Numbers", "I18N_SYLLABUS_SKILL_TITLE": "Skill", "I18N_SYLLABUS_STORY_TITLE": "Story", - "I18N_TEACH_BENEFITS_ONE": "Effective, High-Quality Learning for All Ages", - "I18N_TEACH_BENEFITS_THREE": "Always Free and Easy-to-use", + "I18N_TEACH_BENEFITS_ONE": "Effective, high-quality learning for all ages", + "I18N_TEACH_BENEFITS_THREE": "Always free and easy-to-use", "I18N_TEACH_BENEFITS_TITLE": "Our Benefits", - "I18N_TEACH_BENEFITS_TWO": "Fun, Story-based Lessons", - "I18N_TEACH_PAGE_ACTION_START_LEARNING": "Start Learning", + "I18N_TEACH_BENEFITS_TWO": "Fun, story-based lessons", + "I18N_TEACH_PAGE_ACTION_START_LEARNING": "Start learning today!", + "I18N_TEACH_PAGE_BREADCRUMB": "For Parents/Teachers", "I18N_TEACH_PAGE_CLASSROOM_BUTTON": "VISIT CLASSROOM", "I18N_TEACH_PAGE_CLASSROOM_CONTENT": "In the Classroom, you can find a set of lessons that the Oppia team has designed and tested to make sure they’re effective and fun for all learners. All of the lessons have been reviewed by teachers and experts, so you can feel assured that your students are getting an effective education, while learning at their own pace.", "I18N_TEACH_PAGE_CLASSROOM_TITLE": "Learn from Oppia’s Tested and Verified Lessons", "I18N_TEACH_PAGE_CONTENT": "Oppia is an engaging, new approach to online learning that specifically is made to ensure that everyone has access to quality education.", - "I18N_TEACH_PAGE_HEADING": "Oppia for Parents, Teachers, and Guardians", + "I18N_TEACH_PAGE_CREATORS_SECTION_TITLE": "Our lesson creator team", + "I18N_TEACH_PAGE_FEATURES_SECTION_TITLE": "Oppia product features", + "I18N_TEACH_PAGE_HEADING": "Oppia for parents, teachers, and guardians", + "I18N_TEACH_PAGE_HERO_SUBTEXT": "Oppia lessons can be used to complement classroom teaching, allowing for self-paced, independent learning at home. Parents and guardians also have the added advantage of getting regular updates on their child's progress.", + "I18N_TEACH_PAGE_LESSON_CREATION_STEP_1_TEXT": "Creators come up with a list of skills to be taught for each topic. Skills are based on curricula gathered from around the world and take into consideration the age range of the target audience.", + "I18N_TEACH_PAGE_LESSON_CREATION_STEP_1_TITLE": "1. Skill tree", + "I18N_TEACH_PAGE_LESSON_CREATION_STEP_2_TEXT": "After a thorough review of the skill tree, creators then split up the topic into chapters. This helps them with their next step, creating lesson content and questions relevant to the topic.", + "I18N_TEACH_PAGE_LESSON_CREATION_STEP_2_TITLE": "2. Skill table", + "I18N_TEACH_PAGE_LESSON_CREATION_STEP_3_TEXT": "Creators weave real-life experiences relating to the topic into a story arc, using characters that students can easily identify with.", + "I18N_TEACH_PAGE_LESSON_CREATION_STEP_3_TITLE": "3. Story outline", + "I18N_TEACH_PAGE_LESSON_CREATION_STEP_4_TEXT": "The skill table, story outline, and illustrations are merged together, creating a story-based lesson.", + "I18N_TEACH_PAGE_LESSON_CREATION_STEP_4_TITLE": "4. Script", + "I18N_TEACH_PAGE_LESSON_CREATION_STEP_5_TEXT": "Our experts here at Oppia conduct a thorough review of the lesson content, ensuring that it’s accurate and effectively enables learners to reach new levels of learning.", + "I18N_TEACH_PAGE_LESSON_CREATION_STEP_5_TITLE": "5. Internal review", + "I18N_TEACH_PAGE_LESSON_CREATION_STEP_6_TEXT": "Once the script for each chapter in the topic is implemented, the final lesson is launched on our website and Android app.", + "I18N_TEACH_PAGE_LESSON_CREATION_STEP_6_TITLE": "6. Implementation", + "I18N_TEACH_PAGE_LESSON_CREATOR_1_COUNTRY": "Brazil", + "I18N_TEACH_PAGE_LESSON_CREATOR_1_NAME": "Rita Santos Guimaraes", + "I18N_TEACH_PAGE_LESSON_CREATOR_1_ROLE": "Professor, math teacher and researcher", + "I18N_TEACH_PAGE_LESSON_CREATOR_2_COUNTRY": "India", + "I18N_TEACH_PAGE_LESSON_CREATOR_2_NAME": "Rafiat Sulaimon", + "I18N_TEACH_PAGE_LESSON_CREATOR_2_ROLE": "Lesson creator and former science teacher", + "I18N_TEACH_PAGE_LESSON_CREATOR_3_COUNTRY": "Nigeria", + "I18N_TEACH_PAGE_LESSON_CREATOR_3_NAME": "Aanuoluwapo Adeoti", + "I18N_TEACH_PAGE_LESSON_CREATOR_3_ROLE": "Teacher and creative writer", + "I18N_TEACH_PAGE_LESSON_CREATOR_4_COUNTRY": "United States", + "I18N_TEACH_PAGE_LESSON_CREATOR_4_NAME": "Erin Drake", + "I18N_TEACH_PAGE_LESSON_CREATOR_4_ROLE": "Former Robotics teacher and contractor", + "I18N_TEACH_PAGE_LESSON_CREATOR_5_COUNTRY": "Nigeria", + "I18N_TEACH_PAGE_LESSON_CREATOR_5_NAME": "Adewumi Mobolaji", + "I18N_TEACH_PAGE_LESSON_CREATOR_5_ROLE": "Teacher and Product Designer", + "I18N_TEACH_PAGE_LESSON_CREATOR_6_COUNTRY": "Nigeria", + "I18N_TEACH_PAGE_LESSON_CREATOR_6_NAME": "Success Oghogho", + "I18N_TEACH_PAGE_LESSON_CREATOR_6_ROLE": "Former math teacher and UI/UX Designer", "I18N_TEACH_PAGE_LIBRARY_BUTTON": "BROWSE LIBRARY", "I18N_TEACH_PAGE_LIBRARY_CONTENT": "Educators and community members around the world use Oppia’s lesson creation platform as a way to create and share lessons. You can find over 20,000 lessons for 17 different subjects in our Exploration Library, and maybe you’ll be inspired to create your own!", "I18N_TEACH_PAGE_LIBRARY_TITLE": "Explore Lessons Made By the Community", + "I18N_TEACH_PAGE_LINKEDIN_BUTTON": "LinkedIn profile", + "I18N_TEACH_PAGE_OUTCOMES_SECTION_CONTENT": "We strive for effectiveness and excellence. That's why we continously conduct user studies and randomized trials to ensure our lessons live up to our high standards.", + "I18N_TEACH_PAGE_OUTCOMES_SECTION_FRACTIONS_CONTENT": "We tested a fractions lesson in our Math class using a randomized controlled trial, And here are the results.", + "I18N_TEACH_PAGE_OUTCOMES_SECTION_FRACTIONS_RCT_CONTENT": "This statistics are for topics that were encountered by all the students in the study.", + "I18N_TEACH_PAGE_OUTCOMES_SECTION_FRACTIONS_RCT_HEADING": "RCT Outcomes", + "I18N_TEACH_PAGE_OUTCOMES_SECTION_RCT_HEADING": "Learning Fractions with Oppia", + "I18N_TEACH_PAGE_OUTCOMES_SECTION_TITLE": "Outcomes", "I18N_TEACH_PAGE_SIX_TITLE": "Get Started Learning Today", + "I18N_TEACH_PAGE_TESTIMONIALS_SECTION_TITLE": "Teacher and parent testimonials", + "I18N_TEACH_PAGE_TESTIMONIAL_ROLE_PARENT": "Parent", + "I18N_TEACH_PAGE_TESTIMONIAL_ROLE_TEACHER": "Volunteer teacher", + "I18N_TEACH_PAGE_TIPS_BLOG_BUTTON": "Check out our blog", + "I18N_TEACH_PAGE_TIPS_BLOG_CONTENT": "Oppia's blog stories reflects how educators use our platform. Discover real classroom stories from teachers and volunteers sharing their experience with Oppia.", + "I18N_TEACH_PAGE_TIPS_BLOG_TITLE": "Learn from educators", + "I18N_TEACH_PAGE_TIPS_GUIDE_BUTTON": "Check out our guide", + "I18N_TEACH_PAGE_TIPS_GUIDE_CONTENT": "The Oppia Foundation offers a guide to help parents and teachers get started with Oppia lessons and learn how to use them effectively in the classroom or at home.", + "I18N_TEACH_PAGE_TIPS_GUIDE_TITLE": "Lessons guide", + "I18N_TEACH_PAGE_TIPS_TITLE": "Looking for tips on how to use Oppia lessons?", "I18N_TEACH_PAGE_TITLE": "Guide to Oppia for Parents and Teachers | Oppia", "I18N_TEACH_STUDENT_DETAILS_1": "Riya Sogani", "I18N_TEACH_STUDENT_DETAILS_2": "Wala Awad", diff --git a/assets/i18n/qqq.json b/assets/i18n/qqq.json index 65e9ad6acd01..cd215858c826 100644 --- a/assets/i18n/qqq.json +++ b/assets/i18n/qqq.json @@ -1584,15 +1584,66 @@ "I18N_TEACH_BENEFITS_TITLE": "Title displayed in the benefits section on the splash page.", "I18N_TEACH_BENEFITS_TWO": "The second benefit, shown in the splash page, of using Oppia.", "I18N_TEACH_PAGE_ACTION_START_LEARNING": "Button details below heading for Teach Page -Start Learning", + "I18N_TEACH_PAGE_BREADCRUMB": "Text displayed in the breadcrumb of the teach page.", "I18N_TEACH_PAGE_CLASSROOM_BUTTON": "Text on Button in classroom section in Oppia's Teach Page", "I18N_TEACH_PAGE_CLASSROOM_CONTENT": "Content in classroom section in Oppia's Teach Page.", "I18N_TEACH_PAGE_CLASSROOM_TITLE": "Title in classroom section in Oppia's Teach Page.", "I18N_TEACH_PAGE_CONTENT": "Content below oppia's Teach Page Title.", + "I18N_TEACH_PAGE_CREATORS_SECTION_TITLE": "Title for the section that displays the creators of the lessons.", + "I18N_TEACH_PAGE_FEATURES_SECTION_TITLE": "Title for the section that displays the features of Oppia.", "I18N_TEACH_PAGE_HEADING": "Heading for Oppia's Teach page.", + "I18N_TEACH_PAGE_HERO_SUBTEXT": "Text in the hero section in Oppia's Teach Page.", + "I18N_TEACH_PAGE_LESSON_CREATION_STEP_1_TEXT": "Content for the first step in the lesson creation process on the teach page.", + "I18N_TEACH_PAGE_LESSON_CREATION_STEP_1_TITLE": "Title for the first step in the lesson creation process on the teach page.", + "I18N_TEACH_PAGE_LESSON_CREATION_STEP_2_TEXT": "Content for the second step in the lesson creation process on the teach page.", + "I18N_TEACH_PAGE_LESSON_CREATION_STEP_2_TITLE": "Title for the second step in the lesson creation process on the teach page.", + "I18N_TEACH_PAGE_LESSON_CREATION_STEP_3_TEXT": "Content for the third step in the lesson creation process on the teach page.", + "I18N_TEACH_PAGE_LESSON_CREATION_STEP_3_TITLE": "Title for the third step in the lesson creation process on the teach page.", + "I18N_TEACH_PAGE_LESSON_CREATION_STEP_4_TEXT": "Content for the fourth step in the lesson creation process on the teach page.", + "I18N_TEACH_PAGE_LESSON_CREATION_STEP_4_TITLE": "Title for the fourth step in the lesson creation process on the teach page.", + "I18N_TEACH_PAGE_LESSON_CREATION_STEP_5_TEXT": "Content for the fifth step in the lesson creation process on the teach page.", + "I18N_TEACH_PAGE_LESSON_CREATION_STEP_5_TITLE": "Title for the fifth step in the lesson creation process on the teach page.", + "I18N_TEACH_PAGE_LESSON_CREATION_STEP_6_TEXT": "Content for the sixth step in the lesson creation process on the teach page.", + "I18N_TEACH_PAGE_LESSON_CREATION_STEP_6_TITLE": "title for the sixth step in the lesson creation process on the teach page.", + "I18N_TEACH_PAGE_LESSON_CREATOR_1_COUNTRY": "Country of the first lesson creator displayed below their name on the teach page", + "I18N_TEACH_PAGE_LESSON_CREATOR_1_NAME": "Name of the first lesson creator displayed on the teach page", + "I18N_TEACH_PAGE_LESSON_CREATOR_1_ROLE": "Role of the first lesson creator displayed on the teach page", + "I18N_TEACH_PAGE_LESSON_CREATOR_2_COUNTRY": "Country of the second lesson creator displayed below their name on the teach page", + "I18N_TEACH_PAGE_LESSON_CREATOR_2_NAME": "Name of the second lesson creator displayed on the teach page", + "I18N_TEACH_PAGE_LESSON_CREATOR_2_ROLE": "Role of the second lesson creator displayed on the teach page", + "I18N_TEACH_PAGE_LESSON_CREATOR_3_COUNTRY": "Country of the third lesson creator displayed below their name on the teach page", + "I18N_TEACH_PAGE_LESSON_CREATOR_3_NAME": "Name of the third lesson creator displayed on the teach page", + "I18N_TEACH_PAGE_LESSON_CREATOR_3_ROLE": "Role of the third lesson creator displayed on the teach page", + "I18N_TEACH_PAGE_LESSON_CREATOR_4_COUNTRY": "Country of the fourth lesson creator displayed below their name on the teach page", + "I18N_TEACH_PAGE_LESSON_CREATOR_4_NAME": "Name of the fourth lesson creator displayed on the teach page", + "I18N_TEACH_PAGE_LESSON_CREATOR_4_ROLE": "Role of the fourth lesson creator displayed on the teach page", + "I18N_TEACH_PAGE_LESSON_CREATOR_5_COUNTRY": "Country of the fifth lesson creator displayed below their name on the teach page", + "I18N_TEACH_PAGE_LESSON_CREATOR_5_NAME": "Name of the fifth lesson creator displayed on the teach page", + "I18N_TEACH_PAGE_LESSON_CREATOR_5_ROLE": "Role of the fifth lesson creator displayed on the teach page", + "I18N_TEACH_PAGE_LESSON_CREATOR_6_COUNTRY": "Country of the sixth lesson creator displayed below their name on the teach page", + "I18N_TEACH_PAGE_LESSON_CREATOR_6_NAME": "Name of the sixth lesson creator displayed on the teach page", + "I18N_TEACH_PAGE_LESSON_CREATOR_6_ROLE": "Role of the sixth lesson creator displayed on the teach page", "I18N_TEACH_PAGE_LIBRARY_BUTTON": "Text on Button in library section in Oppia's Teach Page", "I18N_TEACH_PAGE_LIBRARY_CONTENT": "Content in library section in Oppia's Teach Page.", "I18N_TEACH_PAGE_LIBRARY_TITLE": "Title in library section in Oppia's Teach Page.", + "I18N_TEACH_PAGE_LINKEDIN_BUTTON": "Text on the button in the lesson creator card that links to the creator's LinkedIn profile", + "I18N_TEACH_PAGE_OUTCOMES_SECTION_CONTENT": "Content in outcomes section in Oppia's Teach Page.", + "I18N_TEACH_PAGE_OUTCOMES_SECTION_FRACTIONS_CONTENT": "Text displayed in the outcomes section of the teach page. - It explains the outcomes of the study on learning fractions.", + "I18N_TEACH_PAGE_OUTCOMES_SECTION_FRACTIONS_RCT_CONTENT": "Text displayed in the outcomes section of the teach page. - It explains the statistical results of the study on learning fractions.", + "I18N_TEACH_PAGE_OUTCOMES_SECTION_FRACTIONS_RCT_HEADING": "Heading for the RCT of fraction lesson in outcomes section in Oppia's Teach Page", + "I18N_TEACH_PAGE_OUTCOMES_SECTION_RCT_HEADING": "Heading for the RCT in outcomes section in Oppia's Teach Page", + "I18N_TEACH_PAGE_OUTCOMES_SECTION_TITLE": "Title of the outcomes section on Oppia's Teach Page.", "I18N_TEACH_PAGE_SIX_TITLE": "Title in last buttons section in Oppia's Teach Page", + "I18N_TEACH_PAGE_TESTIMONIALS_SECTION_TITLE": "Title of the testimonials section on Oppia's Teach Page.", + "I18N_TEACH_PAGE_TESTIMONIAL_ROLE_PARENT": "Text of the 'Parent' role of person in the testimonial on the teach page", + "I18N_TEACH_PAGE_TESTIMONIAL_ROLE_TEACHER": "Text of the 'Volunteer Teacher' role of person in the testimonial on the teach page", + "I18N_TEACH_PAGE_TIPS_BLOG_BUTTON": "Text on the blog button in the tips section on the teach page which links to the blog page", + "I18N_TEACH_PAGE_TIPS_BLOG_CONTENT": "Content above the blog button in the tips section on the teach page", + "I18N_TEACH_PAGE_TIPS_BLOG_TITLE": "Title of the blog card in the tips section on the teach page", + "I18N_TEACH_PAGE_TIPS_GUIDE_BUTTON": "Text on the guide button in the tips section on the teach page which links to the an Oppia guide pdf.", + "I18N_TEACH_PAGE_TIPS_GUIDE_CONTENT": "Content above the guide button in the tips section on the teach page", + "I18N_TEACH_PAGE_TIPS_GUIDE_TITLE": "Title of the guide card in the tips section on the teach page", + "I18N_TEACH_PAGE_TIPS_TITLE": "Title of the tips section on Oppia's Teach Page.", "I18N_TEACH_PAGE_TITLE": "Text displayed on the browser tab when on Oppia's Teach Page.", "I18N_TEACH_STUDENT_DETAILS_1": "The detail of the first person,displayed below on the teach page", "I18N_TEACH_STUDENT_DETAILS_2": "The detail of the second person,displayed below on the teach page", diff --git a/assets/images/teach/awad.jpg b/assets/images/teach/awad.jpg deleted file mode 100644 index 2edeb88e719c..000000000000 Binary files a/assets/images/teach/awad.jpg and /dev/null differ diff --git a/assets/images/teach/awad.webp b/assets/images/teach/awad.webp deleted file mode 100644 index 61e64964e99c..000000000000 Binary files a/assets/images/teach/awad.webp and /dev/null differ diff --git a/assets/images/teach/banner.webp b/assets/images/teach/banner.webp new file mode 100644 index 000000000000..6055520eb585 Binary files /dev/null and b/assets/images/teach/banner.webp differ diff --git a/assets/images/teach/creators/aanuoluwapo.png b/assets/images/teach/creators/aanuoluwapo.png new file mode 100644 index 000000000000..c2de983e240e Binary files /dev/null and b/assets/images/teach/creators/aanuoluwapo.png differ diff --git a/assets/images/teach/creators/aanuoluwapo.webp b/assets/images/teach/creators/aanuoluwapo.webp new file mode 100644 index 000000000000..3e8474187657 Binary files /dev/null and b/assets/images/teach/creators/aanuoluwapo.webp differ diff --git a/assets/images/teach/creators/adewumi.png b/assets/images/teach/creators/adewumi.png new file mode 100644 index 000000000000..394530e4d7fa Binary files /dev/null and b/assets/images/teach/creators/adewumi.png differ diff --git a/assets/images/teach/creators/adewumi.webp b/assets/images/teach/creators/adewumi.webp new file mode 100644 index 000000000000..3f344b03eb89 Binary files /dev/null and b/assets/images/teach/creators/adewumi.webp differ diff --git a/assets/images/teach/creators/erin.png b/assets/images/teach/creators/erin.png new file mode 100644 index 000000000000..321650e5f8be Binary files /dev/null and b/assets/images/teach/creators/erin.png differ diff --git a/assets/images/teach/creators/erin.webp b/assets/images/teach/creators/erin.webp new file mode 100644 index 000000000000..a5175cfe057f Binary files /dev/null and b/assets/images/teach/creators/erin.webp differ diff --git a/assets/images/teach/creators/rafiat.png b/assets/images/teach/creators/rafiat.png new file mode 100644 index 000000000000..d33de13acf90 Binary files /dev/null and b/assets/images/teach/creators/rafiat.png differ diff --git a/assets/images/teach/creators/rafiat.webp b/assets/images/teach/creators/rafiat.webp new file mode 100644 index 000000000000..4dffba950ab2 Binary files /dev/null and b/assets/images/teach/creators/rafiat.webp differ diff --git a/assets/images/teach/creators/rita.png b/assets/images/teach/creators/rita.png new file mode 100644 index 000000000000..8bf090da7e91 Binary files /dev/null and b/assets/images/teach/creators/rita.png differ diff --git a/assets/images/teach/creators/rita.webp b/assets/images/teach/creators/rita.webp new file mode 100644 index 000000000000..a86e5c8d5dcb Binary files /dev/null and b/assets/images/teach/creators/rita.webp differ diff --git a/assets/images/teach/creators/successOghogho.png b/assets/images/teach/creators/successOghogho.png new file mode 100644 index 000000000000..cfeac6bf8a61 Binary files /dev/null and b/assets/images/teach/creators/successOghogho.png differ diff --git a/assets/images/teach/creators/successOghogho.webp b/assets/images/teach/creators/successOghogho.webp new file mode 100644 index 000000000000..197deda60231 Binary files /dev/null and b/assets/images/teach/creators/successOghogho.webp differ diff --git a/assets/images/teach/flower-bullet-1.webp b/assets/images/teach/flower-bullet-1.webp new file mode 100644 index 000000000000..2c877e269f18 Binary files /dev/null and b/assets/images/teach/flower-bullet-1.webp differ diff --git a/assets/images/teach/flower-bullet-2.webp b/assets/images/teach/flower-bullet-2.webp new file mode 100644 index 000000000000..c5c733168abc Binary files /dev/null and b/assets/images/teach/flower-bullet-2.webp differ diff --git a/assets/images/teach/flower-bullet-3.webp b/assets/images/teach/flower-bullet-3.webp new file mode 100644 index 000000000000..d86432618edf Binary files /dev/null and b/assets/images/teach/flower-bullet-3.webp differ diff --git a/assets/images/teach/himanshu.jpg b/assets/images/teach/himanshu.jpg deleted file mode 100644 index f07bba097a7c..000000000000 Binary files a/assets/images/teach/himanshu.jpg and /dev/null differ diff --git a/assets/images/teach/himanshu.webp b/assets/images/teach/himanshu.webp deleted file mode 100644 index a15fcf6edf2f..000000000000 Binary files a/assets/images/teach/himanshu.webp and /dev/null differ diff --git a/assets/images/teach/lessons-card.png b/assets/images/teach/lessons-card.png deleted file mode 100644 index 57d64ead952e..000000000000 Binary files a/assets/images/teach/lessons-card.png and /dev/null differ diff --git a/assets/images/teach/lessons-card.webp b/assets/images/teach/lessons-card.webp deleted file mode 100644 index a79fc06e4039..000000000000 Binary files a/assets/images/teach/lessons-card.webp and /dev/null differ diff --git a/assets/images/teach/lessons-flow.png b/assets/images/teach/lessons-flow.png deleted file mode 100644 index 2fa6b01ac441..000000000000 Binary files a/assets/images/teach/lessons-flow.png and /dev/null differ diff --git a/assets/images/teach/lessons-flow.webp b/assets/images/teach/lessons-flow.webp deleted file mode 100644 index 33897445d6d6..000000000000 Binary files a/assets/images/teach/lessons-flow.webp and /dev/null differ diff --git a/assets/images/teach/matthew-fractions.png b/assets/images/teach/matthew-fractions.png new file mode 100644 index 000000000000..5aa734b957b7 Binary files /dev/null and b/assets/images/teach/matthew-fractions.png differ diff --git a/assets/images/teach/matthew-fractions.webp b/assets/images/teach/matthew-fractions.webp new file mode 100644 index 000000000000..3f70c48c8f5e Binary files /dev/null and b/assets/images/teach/matthew-fractions.webp differ diff --git a/assets/images/teach/oppia-math-classroom-page.png b/assets/images/teach/oppia-math-classroom-page.png new file mode 100644 index 000000000000..33172cab591f Binary files /dev/null and b/assets/images/teach/oppia-math-classroom-page.png differ diff --git a/assets/images/teach/oppia-math-classroom-page.webp b/assets/images/teach/oppia-math-classroom-page.webp new file mode 100644 index 000000000000..40edf124f967 Binary files /dev/null and b/assets/images/teach/oppia-math-classroom-page.webp differ diff --git a/assets/images/teach/outcomes-legend.png b/assets/images/teach/outcomes-legend.png new file mode 100644 index 000000000000..89a1be9324d7 Binary files /dev/null and b/assets/images/teach/outcomes-legend.png differ diff --git a/assets/images/teach/outcomes-legend.webp b/assets/images/teach/outcomes-legend.webp new file mode 100644 index 000000000000..222d2b1dc3d0 Binary files /dev/null and b/assets/images/teach/outcomes-legend.webp differ diff --git a/assets/images/teach/outcomes-post-test.png b/assets/images/teach/outcomes-post-test.png new file mode 100644 index 000000000000..1984160fc9ac Binary files /dev/null and b/assets/images/teach/outcomes-post-test.png differ diff --git a/assets/images/teach/outcomes-post-test.webp b/assets/images/teach/outcomes-post-test.webp new file mode 100644 index 000000000000..4a99da1af0a7 Binary files /dev/null and b/assets/images/teach/outcomes-post-test.webp differ diff --git a/assets/images/teach/outcomes-pre-test.png b/assets/images/teach/outcomes-pre-test.png new file mode 100644 index 000000000000..5acd4c459943 Binary files /dev/null and b/assets/images/teach/outcomes-pre-test.png differ diff --git a/assets/images/teach/outcomes-pre-test.webp b/assets/images/teach/outcomes-pre-test.webp new file mode 100644 index 000000000000..31b3f61de969 Binary files /dev/null and b/assets/images/teach/outcomes-pre-test.webp differ diff --git a/assets/images/teach/skill-table-image.png b/assets/images/teach/skill-table-image.png new file mode 100644 index 000000000000..735c2ce656db Binary files /dev/null and b/assets/images/teach/skill-table-image.png differ diff --git a/assets/images/teach/skill-table-image.webp b/assets/images/teach/skill-table-image.webp new file mode 100644 index 000000000000..aca7334e6d6c Binary files /dev/null and b/assets/images/teach/skill-table-image.webp differ diff --git a/assets/images/teach/skill-tree-image.png b/assets/images/teach/skill-tree-image.png new file mode 100644 index 000000000000..edb65ab168e7 Binary files /dev/null and b/assets/images/teach/skill-tree-image.png differ diff --git a/assets/images/teach/skill-tree-image.webp b/assets/images/teach/skill-tree-image.webp new file mode 100644 index 000000000000..f995672a28cb Binary files /dev/null and b/assets/images/teach/skill-tree-image.webp differ diff --git a/assets/images/teach/student.jpg b/assets/images/teach/student.jpg deleted file mode 100644 index 726942b3624d..000000000000 Binary files a/assets/images/teach/student.jpg and /dev/null differ diff --git a/assets/images/teach/student.webp b/assets/images/teach/student.webp deleted file mode 100644 index e0f141fef19f..000000000000 Binary files a/assets/images/teach/student.webp and /dev/null differ diff --git a/assets/images/teach/testimonials/awad.jpg b/assets/images/teach/testimonials/awad.jpg new file mode 100644 index 000000000000..fb3dbacc7b2c Binary files /dev/null and b/assets/images/teach/testimonials/awad.jpg differ diff --git a/assets/images/teach/testimonials/awad.webp b/assets/images/teach/testimonials/awad.webp new file mode 100644 index 000000000000..e4ecb2187766 Binary files /dev/null and b/assets/images/teach/testimonials/awad.webp differ diff --git a/assets/images/teach/testimonials/himanshu.jpg b/assets/images/teach/testimonials/himanshu.jpg new file mode 100644 index 000000000000..67140c81fa8c Binary files /dev/null and b/assets/images/teach/testimonials/himanshu.jpg differ diff --git a/assets/images/teach/testimonials/himanshu.webp b/assets/images/teach/testimonials/himanshu.webp new file mode 100644 index 000000000000..c521b1d8aa94 Binary files /dev/null and b/assets/images/teach/testimonials/himanshu.webp differ diff --git a/assets/images/teach/riya.jpg b/assets/images/teach/testimonials/riya.jpg similarity index 100% rename from assets/images/teach/riya.jpg rename to assets/images/teach/testimonials/riya.jpg diff --git a/assets/images/teach/riya.webp b/assets/images/teach/testimonials/riya.webp similarity index 100% rename from assets/images/teach/riya.webp rename to assets/images/teach/testimonials/riya.webp diff --git a/assets/images/teach/yamama.jpg b/assets/images/teach/yamama.jpg deleted file mode 100644 index d07a4b7221a5..000000000000 Binary files a/assets/images/teach/yamama.jpg and /dev/null differ diff --git a/core/templates/app.constants.ts b/core/templates/app.constants.ts index 6f7e469c06e8..b71e2786f564 100644 --- a/core/templates/app.constants.ts +++ b/core/templates/app.constants.ts @@ -235,6 +235,83 @@ export const AppConstants = { DISPLAY_NAME: 'Question Reviews', }, }, + LESSON_CREATORS_DATA_TEACH_PAGE: [ + { + name: 'I18N_TEACH_PAGE_LESSON_CREATOR_1_NAME', + country: 'I18N_TEACH_PAGE_LESSON_CREATOR_1_COUNTRY', + role: 'I18N_TEACH_PAGE_LESSON_CREATOR_1_ROLE', + linkedInUrl: + 'https://www.linkedin.com/in/rita-santos-guimaraes-prof-matematica/', + imagePngUrl: '/teach/creators/rita.png', + imageWebpUrl: '/teach/creators/rita.webp', + }, + { + name: 'I18N_TEACH_PAGE_LESSON_CREATOR_2_NAME', + country: 'I18N_TEACH_PAGE_LESSON_CREATOR_2_COUNTRY', + role: 'I18N_TEACH_PAGE_LESSON_CREATOR_2_ROLE', + linkedInUrl: 'https://www.linkedin.com/in/rafiat-sulaimon-54b817205/', + imagePngUrl: '/teach/creators/rafiat.png', + imageWebpUrl: '/teach/creators/rafiat.webp', + }, + { + name: 'I18N_TEACH_PAGE_LESSON_CREATOR_3_NAME', + country: 'I18N_TEACH_PAGE_LESSON_CREATOR_3_COUNTRY', + role: 'I18N_TEACH_PAGE_LESSON_CREATOR_3_ROLE', + linkedInUrl: 'https://www.linkedin.com/in/rafiat-sulaimon-54b817205/', + imagePngUrl: '/teach/creators/aanuoluwapo.png', + imageWebpUrl: '/teach/creators/aanuoluwapo.webp', + }, + { + name: 'I18N_TEACH_PAGE_LESSON_CREATOR_4_NAME', + country: 'I18N_TEACH_PAGE_LESSON_CREATOR_4_COUNTRY', + role: 'I18N_TEACH_PAGE_LESSON_CREATOR_4_ROLE', + linkedInUrl: 'https://www.linkedin.com/in/rafiat-sulaimon-54b817205/', + imagePngUrl: '/teach/creators/erin.png', + imageWebpUrl: '/teach/creators/erin.webp', + }, + { + name: 'I18N_TEACH_PAGE_LESSON_CREATOR_5_NAME', + country: 'I18N_TEACH_PAGE_LESSON_CREATOR_5_COUNTRY', + role: 'I18N_TEACH_PAGE_LESSON_CREATOR_5_ROLE', + linkedInUrl: 'https://www.linkedin.com/in/rafiat-sulaimon-54b817205/', + imagePngUrl: '/teach/creators/adewumi.png', + imageWebpUrl: '/teach/creators/adewumi.webp', + }, + { + name: 'I18N_TEACH_PAGE_LESSON_CREATOR_6_NAME', + country: 'I18N_TEACH_PAGE_LESSON_CREATOR_6_COUNTRY', + role: 'I18N_TEACH_PAGE_LESSON_CREATOR_6_ROLE', + linkedInUrl: 'https://www.linkedin.com/in/rafiat-sulaimon-54b817205/', + imagePngUrl: '/teach/creators/successOghogho.png', + imageWebpUrl: '/teach/creators/successOghogho.webp', + }, + ], + TESTIMONIAlS_DATA_TEACHERS: [ + { + personDetails: 'I18N_TEACH_STUDENT_DETAILS_1', + role: 'I18N_TEACH_PAGE_TESTIMONIAL_ROLE_TEACHER', + quote: 'I18N_TEACH_TESTIMONIAL_1', + imageUrl: '/teach/testimonials/riya.jpg', + imageUrlWebp: '/teach/testimonials/riya.webp', + altText: 'Riya Sogani', + }, + { + personDetails: 'I18N_TEACH_STUDENT_DETAILS_2', + role: 'I18N_TEACH_PAGE_TESTIMONIAL_ROLE_TEACHER', + quote: 'I18N_TEACH_TESTIMONIAL_2', + imageUrl: '/teach/testimonials/awad.jpg', + imageUrlWebp: '/teach/testimonials/awad.webp', + altText: 'Wala Awad', + }, + { + personDetails: 'I18N_TEACH_STUDENT_DETAILS_3', + role: 'I18N_TEACH_PAGE_TESTIMONIAL_ROLE_TEACHER', + quote: 'I18N_TEACH_TESTIMONIAL_3', + imageUrl: '/teach/testimonials/himanshu.jpg', + imageUrlWebp: '/teach/testimonials/himanshu.webp', + altText: 'Himanshu Taneja', + }, + ], CONTRIBUTOR_BADGE_INITIAL_LEVELS: [1, 10, 20, 50, 100, 200, 300, 400, 500], CONTRIBUTOR_CERTIFICATE_LOGO: '/assets/images/contributor_dashboard/oppia-logo.jpg', @@ -249,6 +326,10 @@ export const AppConstants = { 'https://docs.google.com/forms/d/e/1FAIpQLSc5_rwUjugT_Jt_EB49_zAKWVY68I3fTXF5w9b5faIk7rL6yg/viewform', IMPACT_REPORT_LINK: 'https://drive.google.com/file/d/1uRe145ou9Ka5O2duTB-N-i89NVPEtxh1/view', + PARENTS_TEACHERS_PDF_GUIDE_LINK: + 'https://drive.google.com/file/d/1gMixZ2c0j5XAGPx4qDBDvRgiFvF6PMkk/view', + TEACHER_STORY_TAGGED_BLOGS_LINK: + 'https://www.oppia.org/blog/search/find?q=&tags=(%22Teacher%20story%22)', VOLUNTEER_EXPECTATIONS: [ 'I18N_VOLUNTEER_PAGE_VOLUNTEER_SECTION_EXPECTATION_1', 'I18N_VOLUNTEER_PAGE_VOLUNTEER_SECTION_EXPECTATION_2', diff --git a/core/templates/components/shared-component.module.ts b/core/templates/components/shared-component.module.ts index a4a90d1229a1..5ffde9d04c4e 100644 --- a/core/templates/components/shared-component.module.ts +++ b/core/templates/components/shared-component.module.ts @@ -40,6 +40,7 @@ import {CodeMirrorModule} from './code-mirror/codemirror.module'; import {OppiaCkEditor4Module} from './ck-editor-helpers/ckeditor4.module'; import {BaseModule} from 'base-components/base.module'; import {NgBootstrapModule} from 'modules/ng-boostrap.module'; +import {NgbModule} from '@ng-bootstrap/ng-bootstrap'; import {DragDropModule} from '@angular/cdk/drag-drop'; // Components. @@ -169,6 +170,7 @@ import {CopierComponent} from 'value_generators/templates/copier.component'; import {UndoSnackbarComponent} from './custom-snackbar/undo-snackbar.component'; import {TranslationModalComponent} from 'pages/contributor-dashboard-page/modal-templates/translation-modal.component'; import {OppiaCkEditorCopyToolBarModule} from 'components/ck-editor-helpers/ck-editor-copy-toolbar/ck-editor-copy-toolbar.module'; +import {FullExpandAccordionComponent} from 'pages/about-page/accordion/full-expand-accordion.component'; // Pipes. import {StringUtilityPipesModule} from 'filters/string-utility-filters/string-utility-pipes.module'; @@ -228,6 +230,7 @@ import {DirectivesModule} from 'directives/directives.module'; TranslateModule, DynamicComponentModule, DirectivesModule, + NgbModule, ], providers: [ @@ -370,6 +373,7 @@ import {DirectivesModule} from 'directives/directives.module'; RteHelperModalComponent, UndoSnackbarComponent, TranslationModalComponent, + FullExpandAccordionComponent, ], entryComponents: [ @@ -507,6 +511,7 @@ import {DirectivesModule} from 'directives/directives.module'; RteHelperModalComponent, UndoSnackbarComponent, TranslationModalComponent, + FullExpandAccordionComponent, ], exports: [ @@ -654,6 +659,7 @@ import {DirectivesModule} from 'directives/directives.module'; RteHelperModalComponent, UndoSnackbarComponent, TranslationModalComponent, + FullExpandAccordionComponent, ], }) export class SharedComponentsModule {} diff --git a/core/templates/pages/about-page/about-page.component.css b/core/templates/pages/about-page/about-page.component.css index 432530ec15e4..18f8750123a6 100644 --- a/core/templates/pages/about-page/about-page.component.css +++ b/core/templates/pages/about-page/about-page.component.css @@ -37,6 +37,7 @@ font-size: 4.8rem; line-height: 60px; margin: 0; + text-align: start; } .about-page .oppia-about-hero-subtext { @@ -902,9 +903,6 @@ } .about-page .oppia-about-cta-donor { - display: flex; - flex-direction: column; - gap: 32px; padding: 48px 64px; } @@ -931,6 +929,7 @@ flex-direction: row; flex-wrap: wrap; gap: 16px; + margin: 32px 0; } .about-page .oppia-about-statement-type1 { @@ -1060,6 +1059,19 @@ background-color: transparent; padding: 0; } + +.feature-panel button, +.oppia-about-features-list button, +.feature-panel button:active, +.feature-panel button:focus, +.feature-panel button:hover, +.oppia-about-features-list button:active, +.oppia-about-features-list button:focus, +.oppia-about-features-list button:hover { + border: none; + outline: none; +} + .about-page .oppia-cta-carousel-container button, .about-page .oppia-cta-carousel-container button:focus, .about-page .oppia-cta-carousel-container button:hover, @@ -1074,10 +1086,13 @@ } .about-page .oppia-about-cta-donor { - gap: 16px; padding: 48px 32px; } + .about-page .oppia-about-cta-donor-impact-statements { + margin: 16px 0; + } + .about-page .oppia-about-cta-donate-button { margin-top: 24px; } diff --git a/core/templates/pages/about-page/about-page.module.ts b/core/templates/pages/about-page/about-page.module.ts index 4d523976598c..839ebcd9a8c5 100644 --- a/core/templates/pages/about-page/about-page.module.ts +++ b/core/templates/pages/about-page/about-page.module.ts @@ -24,7 +24,7 @@ import {CommonModule} from '@angular/common'; import {SharedComponentsModule} from 'components/shared-component.module'; import {BarChartComponent} from './charts/bar-chart.component'; import {NgbModule} from '@ng-bootstrap/ng-bootstrap'; -import {FullExpandAccordionComponent} from './accordion/full-expand-accordion.component'; + @NgModule({ imports: [ CommonModule, @@ -32,11 +32,6 @@ import {FullExpandAccordionComponent} from './accordion/full-expand-accordion.co AboutPageRoutingModule, NgbModule, ], - declarations: [ - AboutPageComponent, - AboutPageRootComponent, - BarChartComponent, - FullExpandAccordionComponent, - ], + declarations: [AboutPageComponent, AboutPageRootComponent, BarChartComponent], }) export class AboutPageModule {} diff --git a/core/templates/pages/about-page/accordion/full-expand-accordion.component.css b/core/templates/pages/about-page/accordion/full-expand-accordion.component.css index 2dd95d5037eb..f2bbf8acfc54 100644 --- a/core/templates/pages/about-page/accordion/full-expand-accordion.component.css +++ b/core/templates/pages/about-page/accordion/full-expand-accordion.component.css @@ -10,13 +10,6 @@ width: 100%; } -.collapse-container button, -.collapse-container button:active, -.collapse-container button:hover { - border: none; - outline: none; -} - .collapse-container p { margin: 0; } diff --git a/core/templates/pages/about-page/accordion/full-expand-accordion.component.html b/core/templates/pages/about-page/accordion/full-expand-accordion.component.html index 9f5a34c7101d..59c916b5a003 100644 --- a/core/templates/pages/about-page/accordion/full-expand-accordion.component.html +++ b/core/templates/pages/about-page/accordion/full-expand-accordion.component.html @@ -28,7 +28,13 @@ -

{{ accordionData[activeIndex].text | translate }}

- - +

{{ accordionData[activeIndex].text | translate }}

+
+ + + + + +
diff --git a/core/templates/pages/about-page/accordion/full-expand-accordion.component.spec.ts b/core/templates/pages/about-page/accordion/full-expand-accordion.component.spec.ts index 4901eb53e434..67704cdfdc2b 100644 --- a/core/templates/pages/about-page/accordion/full-expand-accordion.component.spec.ts +++ b/core/templates/pages/about-page/accordion/full-expand-accordion.component.spec.ts @@ -21,6 +21,7 @@ import {MockTranslatePipe} from 'tests/unit-test-utils'; import {FullExpandAccordionComponent} from './full-expand-accordion.component'; import {NgbModule} from '@ng-bootstrap/ng-bootstrap'; import {MatIconModule} from '@angular/material/icon'; +import {UrlInterpolationService} from 'domain/utilities/url-interpolation.service'; describe('FullExpandAccordionComponent', () => { let component: FullExpandAccordionComponent; @@ -30,6 +31,7 @@ describe('FullExpandAccordionComponent', () => { await TestBed.configureTestingModule({ declarations: [FullExpandAccordionComponent, MockTranslatePipe], imports: [NgbModule, MatIconModule], + providers: [UrlInterpolationService], }).compileComponents(); }); @@ -81,4 +83,10 @@ describe('FullExpandAccordionComponent', () => { expect(component.listIsCollapsed).toBeFalse(); expect(component.panelIsCollapsed).toBeTrue(); }); + + it('should get static image url', () => { + expect(component.getStaticImageUrl('/path/to/image')).toBe( + '/assets/images/path/to/image' + ); + }); }); diff --git a/core/templates/pages/about-page/accordion/full-expand-accordion.component.ts b/core/templates/pages/about-page/accordion/full-expand-accordion.component.ts index 8749b8bb3d58..aa715d00044d 100644 --- a/core/templates/pages/about-page/accordion/full-expand-accordion.component.ts +++ b/core/templates/pages/about-page/accordion/full-expand-accordion.component.ts @@ -20,6 +20,7 @@ import {Component, Input} from '@angular/core'; import {downgradeComponent} from '@angular/upgrade/static'; import './full-expand-accordion.component.css'; import {AccordionPanelData} from '../data.model'; +import {UrlInterpolationService} from 'domain/utilities/url-interpolation.service'; @Component({ selector: 'oppia-full-expand-accordion', @@ -42,7 +43,7 @@ export class FullExpandAccordionComponent { panelIsCollapsed: boolean = true; activeIndex: number = 0; - constructor() {} + constructor(private urlInterpolationService: UrlInterpolationService) {} expandPanel(index: number): void { this.activeIndex = index; @@ -54,6 +55,10 @@ export class FullExpandAccordionComponent { this.listIsCollapsed = false; this.panelIsCollapsed = true; } + + getStaticImageUrl(imagePath: string): string { + return this.urlInterpolationService.getStaticImageUrl(imagePath); + } } angular.module('oppia').directive( diff --git a/core/templates/pages/about-page/data.model.ts b/core/templates/pages/about-page/data.model.ts index b53131c28298..9519a16c2815 100644 --- a/core/templates/pages/about-page/data.model.ts +++ b/core/templates/pages/about-page/data.model.ts @@ -20,6 +20,7 @@ export interface AccordionPanelData { title: string; text: string; image?: string; + altText?: string; customPanelClassNames: string[]; customTitleClassNames: string[]; panelIsCollapsed: boolean; diff --git a/core/templates/pages/teach-page/teach-page-root.component.html b/core/templates/pages/teach-page/teach-page-root.component.html index 6682524804c2..eb8be30a9760 100644 --- a/core/templates/pages/teach-page/teach-page-root.component.html +++ b/core/templates/pages/teach-page/teach-page-root.component.html @@ -1,5 +1,13 @@ + + + diff --git a/core/templates/pages/teach-page/teach-page.component.css b/core/templates/pages/teach-page/teach-page.component.css new file mode 100644 index 000000000000..931d64d7310a --- /dev/null +++ b/core/templates/pages/teach-page/teach-page.component.css @@ -0,0 +1,1033 @@ +/* + NOTE to developers: We generate RTL CSS from this file in the webpack + compilation, here are sme additional rules that can be added to the CSS files: + https://rtlcss.com/learn/usage-guide/control-directives . +*/ + +.teach-page { + background-color: #fff; + color: #333; +} + +.teach-page p { + margin-bottom: 0; +} + +.teach-page .oppia-teach-hero-title, +.teach-page .oppia-teach-title, +.teach-page .oppia-teach-subtitle { + color: #00645c; + font-family: "Capriola", "Roboto", Arial, sans-serif; +} + +.teach-page .oppia-teach-hero-title { + font-size: 4.8rem; + line-height: 57.6px; +} + +.teach-page .oppia-teach-title { + font-size: 3rem; + line-height: 40.5px; +} + +.teach-page .oppia-teach-subtitle { + font-size: 3rem; + line-height: 36px; +} + +.teach-page .oppia-teach-subtext { + font-family: "Roboto", Arial, sans-serif; + font-size: 1.8rem; + line-height: 21.6px; +} + +.teach-page .oppia-teach-text { + color: #00645c; + font-weight: 700; +} + +.teach-page .oppia-teach-subtext.oppia-teach-bolded-text { + font-weight: 700; + margin-bottom: 8px; +} + +.teach-page .oppia-teach-btn { + font-size: 18px; + font-weight: 700; + letter-spacing: normal; + line-height: 21.6px; + max-width: 100%; + min-height: 44px; + min-width: 240px; + padding: 10px; +} + +.teach-page .oppia-teach-secondary-btn { + background-color: #fff; + border: 1px solid #00645c; + color: #00645c; +} +.teach-page .oppia-teach-secondary-btn:hover, +.teach-page .oppia-teach-secondary-btn:focus { + border-width: 2px; +} +.teach-page .oppia-teach-secondary-btn:active { + background-color: #f5f5f5; +} + +.teach-page .carousel-indicators li { + background-color: gray; + border-radius: 50%; +} + +.teach-page .carousel-indicators li.active { + background-color: #005240; +} + +.teach-page .rtl-flip { + transform: scaleX(-1); +} + +.teach-page .oppia-teach-hero-section { + align-items: end; + background-image: url("/assets/images/teach/banner.webp"); + background-repeat: no-repeat; + background-size: cover; + display: flex; + min-height: 448px; + padding: 40px 64px; +} + +.teach-page .oppia-teach-hero-box { + background-color: #fff; + border-radius: 4px; + display: flex; + flex-direction: column; + gap: 8px; + max-width: 58%; + padding: 48px 32px; +} + +.teach-page .oppia-teach-hero-subtext { + font-size: 2rem; + line-height: 24px; +} + +.teach-page .oppia-teach-tips-section { + background-color: #fff; + padding: 112px 64px; +} + +.teach-page .oppia-teach-tips-section .oppia-teach-title { + width: 42%; +} + +.teach-page .oppia-teach-tips-section .oppia-teach-tips-boxes-container { + display: flex; + flex-direction: row; + gap: 16px; + margin-top: 16px; +} + +.teach-page .oppia-teach-tips-box { + border-radius: 4px; + display: flex; + flex-direction: column; + padding: 24px 48px; + width: 50%; +} + +.teach-page .oppia-teach-tips-box .oppia-teach-subtext { + margin: 8px 0 24px; +} + +.teach-page .oppia-teach-tips-guide-box { + align-items: start; + background-color: #e3f1f1; +} + +.teach-page .oppia-teach-tips-blog-box { + align-items: start; + border: 2px solid #eee; +} + +.teach-page .oppia-teach-tips-section .oppia-teach-subtitle { + font-size: 2rem; + line-height: 27px; +} + +.teach-page .oppia-teach-creators-section { + background-color: #fff; + padding: 0 64px 112px; + width: 100%; +} + +.teach-page .oppia-teach-creators-carousel { + display: flex; + gap: 32px; + margin: 24px 0 32px; + -ms-overflow-style: none; + overflow-x: scroll; + scrollbar-width: none; +} + +.teach-page .oppia-teach-creators-carousel::-webkit-scrollbar { + display: none; +} + +.teach-page .oppia-teach-creators-carousel-item { + display: flex; + flex-direction: column; + flex-shrink: 0; + gap: 8px; + width: 240px; +} + +.teach-page .oppia-teach-creators-carousel-item-header { + display: flex; + flex-direction: column; + gap: 4px; +} + +.teach-page .oppia-teach-creators-carousel-item-image { + position: relative; + width: 100%; +} + +.teach-page .oppia-teach-creators-carousel-item-image img { + opacity: 0.8; + width: 100%; +} + +.teach-page .oppia-teach-creators-carousel-item-image p { + background-color: #00645c80; + bottom: 8px; + color: #fff; + padding: 4px 13px; + position: absolute; + width: 100%; +} + +.teach-page .oppia-teach-creators-carousel-item .oppia-teach-btn { + min-width: 0; + width: 100%; +} + +.teach-page .oppia-teach-creators-arrows-container { + display: flex; + gap: 16px; + justify-content: center; + margin-top: 32px; + padding: 24px 0; +} + +.teach-page .oppia-teach-creators-arrows-container i { + color: #00645c; + font-size: 36px; +} + +.teach-page .oppia-teach-creators-arrows-container i.oppia-disabled-icon { + color: #b7bbbf; +} + +.teach-page .oppia-teach-lesson-section { + background-color: #fff; + padding: 0 64px 64px; +} + +.teach-page .oppia-teach-lesson-section .oppia-teach-heading { + font-family: "Roboto", Arial, sans-serif; + font-size: 2.4rem; + font-weight: 500; + line-height: 28.8px; +} + +.teach-page .oppia-teach-lesson-top { + margin-bottom: 32px; + width: 60%; +} + +.teach-page .oppia-teach-lesson-top .oppia-teach-heading { + color: #00645c; + margin: 16px 0 8px; +} + +.teach-page .oppia-teach-lesson-bottom { + display: flex; + flex-direction: row; + gap: 64px; + width: 100%; +} + +.teach-page .oppia-teach-lesson-left { + display: flex; + flex-direction: column; + justify-content: center; + width: calc(54% - 64px); +} + +.teach-page .oppia-teach-lesson-left .oppia-teach-heading { + margin-bottom: 16px; +} + +.teach-page .oppia-teach-lesson-right { + align-items: start; + background-color: #e3f1f1; + display: flex; + flex-direction: column; + padding: 24px 48px; + width: 46%; +} + +.teach-page .oppia-teach-lesson-right .oppia-teach-subheading { + font-family: "Roboto", Arial, sans-serif; + font-size: 1.8rem; + font-weight: 500; + line-height: 21.6px; +} + +.teach-page .oppia-teach-lesson-image { + margin: 8px 0 24px; +} + +.teach-page .oppia-teach-lesson-image img { + width: 100%; +} + +.teach-page .oppia-teach-accordion-container { + background-color: #fff; +} + +.oppia-teach-lesson-list { + display: flex; + flex-direction: column; + gap: 8px; +} + +.teach-page .oppia-teach-lesson-panel-title { + background-color: #fff; + border: 1px solid #00645c; + border-radius: 4px; + min-height: 54px; + padding: 8px 22px 8px 10px; +} + +.teach-page .oppia-teach-lesson-panel .title-container, +.teach-page .oppia-teach-lesson-panel-title { + font-family: "Roboto", Arial, sans-serif; + font-size: 2rem; + line-height: 24px; +} + +.teach-page .oppia-teach-lesson-panel-title:active, +.teach-page .oppia-teach-lesson-panel-title:focus, +.teach-page .oppia-teach-lesson-panel-title:hover { + border: 0.75px solid #00645c; + outline: none; +} + +.oppia-teach-lesson-panel { + background-color: #e3f1f1; + border: 1px solid #00645c; + border-radius: 4px; +} + +.oppia-teach-lesson-panel .panel-image-container { + display: flex; + justify-content: center; + margin-bottom: 16px; + padding: 0 16px; +} + +.teach-page .oppia-teach-lesson-panel .panel-content { + font-family: "Roboto", Arial, sans-serif; + font-size: 1.8rem; + line-height: 21.6px; + padding: 10px 20px 16px 30px; + width: 94%; +} + +.teach-page .oppia-teach-lesson-panel .title-container { + color: #00645c; + font-weight: 700; + padding: 14px 16px 8px; +} + +.teach-page .oppia-teach-outcomes-section { + background-color: #e3f1f1; + display: flex; + flex-direction: row; + gap: 68px; + margin: 0 64px 112px; + padding: 32px 24px; +} + +.teach-page .oppia-teach-outcomes-section .oppia-teach-title { + margin-bottom: 16px; +} + +.teach-page .oppia-teach-outcomes-left { + width: 60%; +} + +.teach-page .oppia-teach-outcomes-section-right .oppia-teach-subtext b { + margin-bottom: 8px; +} + +.teach-page .oppia-teach-outcomes-rct-container { + background-color: #fff; + border-radius: 4px; + margin: 16px 0 24px; + padding: 16px; +} + +.teach-page .oppia-teach-outcomes-rct-container img { + width: 100%; +} + +.teach-page .oppia-teach-outcomes-rct-heading { + color: #00645c; + font-family: "Roboto", Arial, sans-serif; + font-size: 2.4rem; + font-weight: 500; + line-height: 28.8px; +} + +.teach-page .oppia-teach-outcomes-chart { + align-items: end; + display: flex; + flex-direction: row; + gap: 48px; +} + +.teach-page .oppia-teach-outcomes-legend-container { + margin-bottom: 32px; + width: calc(30% - 48px); +} + +.teach-page .oppia-teach-outcomes-legend { + width: 100%; +} + +.teach-page .oppia-teach-outcomes-charts-container { + align-items: end; + display: flex; + flex-direction: row; + justify-content: space-between; + padding: 0 24px; + width: 70%; +} + +.teach-page .oppia-teach-testimonials-section { + padding: 0 64px 112px; +} + +.teach-page .oppia-teach-testimonials-section .oppia-teach-subtitle { + margin-bottom: 32px; +} + +.teach-page .oppia-teach-testimonials-section .carousel-indicators { + bottom: -48px; + gap: 8px; + margin: 0; +} + +.teach-page .oppia-teach-testimonials-section .carousel-indicators li { + height: 20px; + width: 20px; +} + +.teach-page .oppia-teach-testimonials-container { + background-color: #e3f1f1; + border-radius: 4px; + padding: 48px 64px 100px; +} + +.teach-page .oppia-teach-testimonial-top { + align-items: end; + display: flex; + flex-direction: row; + gap: 64px; + margin-bottom: 16px; + width: 100%; +} + +.teach-page .oppia-teach-testimonial-left { + width: 31%; +} + +.teach-page .oppia-teach-testimonial-right { + padding-bottom: 48px; + width: calc(66% - 34px); +} + +.teach-page .oppia-teach-testimonials-container i { + color: #00645c; + font-size: 28px; +} + +.teach-page .oppia-teach-testimonials-container > button { + background-color: transparent; + padding: 24px; +} + +.teach-page .oppia-teach-creators-arrows-container button { + background-color: #fff; + border: none; + height: 40px; + outline: none; + width: 40px; +} + +.teach-page .oppia-teach-lesson-panel button { + border: none; + outline: none; +} + +.teach-page .oppia-teach-testimonials-container > button, +.teach-page .oppia-teach-testimonials-container > button:active, +.teach-page .oppia-teach-testimonials-container > button:focus, +.teach-page .oppia-teach-testimonials-container > button:hover { + border: none; + outline: none; +} + +.teach-page .oppia-teach-creators-arrows-container button:active, +.teach-page .oppia-teach-creators-arrows-container button:focus, +.teach-page .oppia-teach-creators-arrows-container button:hover { + border: none; + outline: none; +} + +.teach-page .oppia-teach-lesson-panel button:active, +.teach-page .oppia-teach-lesson-panel button:focus, +.teach-page .oppia-teach-lesson-panel button:hover { + border: none; + outline: none; +} + +.teach-page .oppia-teach-testimonial-image img { + border-radius: 50%; +} + +.teach-page .oppia-teach-testimonial-name { + color: #000; + font-family: "Capriola", "Roboto", Arial, sans-serif; + font-size: 2rem; + line-height: 24px; + margin-bottom: 16px; +} + +.teach-page .oppia-teach-features-section { + align-items: center; + background-color: #fff; + display: flex; + flex-direction: row; + gap: 64px; + padding: 32px 64px; +} + +.teach-page .oppia-teach-features-left { + margin: 0 32px; + width: 44%; +} + +.teach-page .oppia-teach-matthew-image img { + width: 100%; +} + +.teach-page .oppia-teach-creators-carousel-item-image img:hover { + opacity: 1; +} + +.teach-page .oppia-teach-features-right .oppia-teach-subtitle { + margin: 0 0 32px 56px; +} + +.teach-page .oppia-teach-features { + display: flex; + flex-direction: column; + gap: 16px; + width: 74%; +} + +.teach-page .oppia-teach-feature { + align-items: center; + display: flex; + flex-direction: row; + gap: 8px; +} + +.teach-page .oppia-teach-feature-text { + font-family: "Capriola", "Roboto", Arial, sans-serif; + font-size: 2rem; + line-height: 28px; +} + +.teach-page .oppia-teach-cta-section { + background-color: #fff; + padding: 112px 0; +} + +.teach-page .oppia-teach-cta-section .oppia-teach-subtitle { + margin-bottom: 32px; + text-align: center; +} + +.teach-page .oppia-teach-cta-buttons-container { + display: flex; + flex-direction: row; + gap: 16px; + justify-content: center; +} + +.teach-page .oppia-teach-cta-section .oppia-teach-btn { + min-width: 360px; +} + +@media only screen and (max-width: 603px) { + .teach-page .oppia-teach-creators-carousel-item-header .oppia-teach-text { + min-height: 38px; + } +} + +@media only screen and (min-width: 641px) { + .teach-page .oppia-teach-testimonial-quote2 { + display: none; + } +} + +@media only screen and (min-width: 922px) { + .teach-page .oppia-teach-testimonials-container > button { + display: none; + } +} + +@media only screen and (max-width: 1051px) { + .teach-page .oppia-teach-features-section { + gap: 32px; + padding: 0 48px; + } + .teach-page .oppia-teach-features-left { + margin: 0; + width: 66%; + } + .teach-page .oppia-teach-features-right .oppia-teach-subtitle { + margin: 0 0 16px 48px; + } + .teach-page .oppia-teach-features { + width: 100%; + } + .teach-page .oppia-teach-feature-text { + font-size: 1.6rem; + line-height: 22.4px; + } +} + +@media only screen and (max-width: 976px) { + .teach-page .oppia-teach-lesson-bottom { + flex-direction: column; + gap: 48px; + } + .teach-page .oppia-teach-lesson-left { + width: 100%; + } + .teach-page .oppia-teach-lesson-right { + background-color: #fff; + padding: 0; + width: 100%; + } +} + +@media only screen and (max-width: 922px) { + .teach-page .oppia-teach-testimonials-section { + padding: 0 0 80px; + } + .teach-page .oppia-teach-testimonials-section .oppia-teach-subtitle { + margin-bottom: 16px; + padding-left: 48px; + } + .teach-page .oppia-teach-testimonials-section .carousel-indicators { + bottom: -36px; + gap: 0; + } + .teach-page .oppia-teach-testimonials-section .carousel-indicators li { + height: 8px; + width: 8px; + } + .teach-page .oppia-teach-testimonials-container { + align-items: center; + display: flex; + flex-direction: row; + gap: 16px; + padding: 48px 16px 52px; + } + .teach-page .oppia-teach-testimonial-top { + gap: 24px; + min-height: 163px; + } + .teach-page .oppia-teach-testimonial-left { + width: 27%; + } + .teach-page .oppia-teach-testimonial-right { + padding-bottom: 0; + width: calc(73% - 34px); + } + .teach-page .oppia-teach-testimonial { + padding: 0; + } +} + +@media only screen and (max-width: 769px) { + .teach-page .oppia-teach-hero-title { + font-size: 3rem; + line-height: 33.6px; + } + .teach-page .oppia-teach-title { + font-size: 3rem; + line-height: 40.5px; + } + .teach-page .oppia-teach-subtitle { + font-size: 2rem; + line-height: 24px; + } + .teach-page .oppia-teach-subtext { + font-size: 1.6rem; + line-height: 19.2px; + } + .teach-page .oppia-teach-hero-section { + background-size: cover; + min-height: 364px; + padding: 32px 48px; + } + .teach-page .oppia-teach-hero-box { + max-width: 64%; + padding: 32px; + } + .teach-page .oppia-teach-hero-subtext { + font-size: 1.6rem; + line-height: 19.2px; + } + .teach-page .oppia-teach-tips-section { + padding: 80px 48px; + } + .teach-page .oppia-teach-tips-section .oppia-teach-title { + width: 70%; + } + .teach-page .oppia-teach-tips-section .oppia-teach-tips-boxes-container { + flex-direction: column; + gap: 8px; + margin-top: 24px; + } + .teach-page .oppia-teach-tips-box { + width: 100%; + } + .teach-page .oppia-teach-creators-section { + padding: 0 48px 80px; + } + .teach-page .oppia-teach-creators-carousel { + gap: 24px; + margin: 24px 0 16px; + } + .teach-page .oppia-teach-creators-carousel-item { + width: calc((100% - 48px) / 3); + } + .teach-page .oppia-teach-creators-carousel-item-image .oppia-teach-subtext { + font-size: 1.3rem; + line-height: 15.6px; + min-height: 40px; + padding: 4px 8px; + } + .teach-page .oppia-teach-lesson-section { + padding: 0 48px 80px; + } + .teach-page .oppia-teach-lesson-top { + margin-bottom: 24px; + width: 85%; + } + .teach-page .oppia-teach-lesson-section .oppia-teach-heading, + .teach-page .oppia-teach-lesson-right .oppia-teach-subheading { + font-size: 2rem; + line-height: 24px; + } + .teach-page .oppia-teach-lesson-top .oppia-teach-heading { + font-size: 1.8rem; + line-height: 21.6px; + margin: 8px 0; + } + .teach-page .oppia-teach-lesson-image { + margin: 16px 0 32px; + } + .teach-page .oppia-teach-lesson-panel .panel-content { + font-size: 1.6rem; + line-height: 19.2px; + padding: 10px 16px 16px 24px; + width: 100%; + } + .teach-page .oppia-teach-outcomes-section { + flex-direction: column; + gap: 32px; + margin: 0 48px 80px; + } + .teach-page .oppia-teach-outcomes-left { + width: 100%; + } + .teach-page .oppia-teach-outcomes-rct-container { + padding: 16px 0 56px 16px; + } + .teach-page .oppia-teach-outcomes-charts-container { + gap: 32px; + justify-content: start; + } + .teach-page .oppia-teach-cta-section .oppia-teach-btn { + min-width: 240px; + } + .teach-page .oppia-teach-cta-section { + padding: 80px 0; + } + .teach-page .oppia-teach-cta-section .oppia-teach-subtitle { + margin-bottom: 24px; + } +} + +@media only screen and (max-width: 641px) { + .teach-page .oppia-teach-hero-section { + min-height: 376px; + padding: 24px; + } + .teach-page .oppia-teach-hero-box { + max-width: 100%; + } + .teach-page .oppia-teach-tips-section { + padding: 24px; + } + .teach-page .oppia-teach-tips-section .oppia-teach-title { + width: 82%; + } + .teach-page .oppia-teach-creators-section { + padding: 0 40px 64px; + } + .teach-page .oppia-teach-creators-carousel { + gap: 16px; + margin: 16px 0; + } + .teach-page .oppia-teach-creators-carousel-item { + width: calc((100% - 32px) / 3); + } + .teach-page .oppia-teach-lesson-section { + padding: 0 40px 64px; + } + .teach-page .oppia-teach-lesson-top { + width: 90%; + } + .teach-page .oppia-teach-lesson-bottom { + gap: 40px; + } + .teach-page .oppia-teach-lesson-panel .title-container, + .teach-page .oppia-teach-lesson-panel-title, + .teach-page .oppia-teach-lesson-section .oppia-teach-heading, + .teach-page .oppia-teach-lesson-right .oppia-teach-subheading { + font-size: 1.8rem; + line-height: 21.6px; + } + .teach-page .oppia-teach-lesson-panel .panel-content { + padding: 10px 16px 16px; + } + .teach-page .oppia-teach-outcomes-section { + margin: 0 40px 64px; + padding: 32px 16px; + } + .teach-page .oppia-teach-testimonial-quote1 { + display: none; + } + .teach-page .oppia-teach-testimonials-section { + padding: 0 0 64px; + } + .teach-page .oppia-teach-testimonials-container { + gap: 8px; + padding: 32px 16px 52px; + } + .teach-page .oppia-teach-testimonial-top { + gap: 16px; + min-height: 0; + } + .teach-page .oppia-teach-testimonial-left { + width: 27%; + } + .teach-page .oppia-teach-testimonial-right { + width: calc(73% - 34px); + } + .teach-page .oppia-teach-testimonial-quote2 { + min-height: 96px; + } + .teach-page .oppia-teach-features-section { + flex-direction: column; + padding: 0; + } + .teach-page .oppia-teach-features-left { + width: 52%; + } + .teach-page .oppia-teach-features-right { + width: 48%; + } + .teach-page .oppia-teach-cta-section { + padding: 64px 0; + } + .teach-page .oppia-teach-cta-section .oppia-teach-subtitle { + margin-bottom: 16px; + } +} + +@media only screen and (max-width: 553px) { + .teach-page .oppia-teach-title { + font-size: 2rem; + line-height: 27px; + } + .teach-page .oppia-teach-hero-section { + min-height: 376px; + padding: 32px 12px; + } + .teach-page .oppia-teach-tips-section { + padding: 56px 20px; + } + .teach-page .oppia-teach-tips-section .oppia-teach-title { + width: 100%; + } + .teach-page .oppia-teach-tips-box { + padding: 24px 20px; + } + .teach-page .oppia-teach-creators-section { + padding: 0 20px 56px; + } + .teach-page .oppia-teach-creators-carousel-item { + width: calc((100% - 32px) / 2); + } + .teach-page .oppia-teach-creators-carousel-item .oppia-teach-btn { + min-height: 0; + min-width: 0; + padding: 6px; + } + .teach-page .oppia-teach-lesson-section { + padding: 0 20px 56px; + } + .teach-page .oppia-teach-lesson-top { + width: 100%; + } + .teach-page .oppia-teach-lesson-top .oppia-teach-subtitle { + width: 86%; + } + .teach-page .oppia-teach-lesson-bottom { + gap: 32px; + } + .teach-page .oppia-teach-lesson-image { + margin: 8px 0 24px; + } + .teach-page .oppia-teach-lesson-left .oppia-teach-heading { + margin-bottom: 8px; + } + .teach-page .oppia-teach-lesson-panel-title { + min-height: 40px; + padding-left: 16px; + } + .teach-page .oppia-teach-lesson-panel .title-container, + .teach-page .oppia-teach-lesson-panel-title { + font-size: 1.6rem; + line-height: 19.2px; + } + .oppia-teach-lesson-list { + gap: 4px; + } + .teach-page .oppia-teach-outcomes-section { + margin: 0 0 56px; + padding: 32px 20px; + } + .teach-page .oppia-teach-outcomes-rct-container { + padding: 16px; + } + .teach-page .oppia-teach-outcomes-chart { + align-items: start; + flex-direction: column; + gap: 8px; + } + .teach-page .oppia-teach-outcomes-charts-container { + gap: 16px; + padding: 0; + width: 100%; + } + .teach-page .oppia-teach-outcomes-legend-container { + width: 36%; + } + .teach-page .oppia-teach-outcomes-pre-test-container, + .teach-page .oppia-teach-outcomes-post-test-container { + width: 50%; + } + .teach-page .oppia-teach-outcomes-rct-heading { + margin-bottom: 8px; + } + .teach-page .oppia-teach-testimonials-section { + padding: 0 0 56px; + } + .teach-page .oppia-teach-testimonials-container { + gap: 4px; + padding: 32px 0 52px; + } + .teach-page .oppia-teach-testimonial-top { + gap: 8px; + min-height: 100px; + } + .teach-page .oppia-teach-testimonial-left { + width: 32%; + } + .teach-page .oppia-teach-testimonial-right { + width: calc(68% - 8px); + } + .teach-page .oppia-teach-testimonial-quote2 { + min-height: 156px; + } + .teach-page .oppia-teach-testimonials-container > button { + padding: 15px; + } + .teach-page .oppia-teach-testimonial-name { + font-size: 1.8rem; + line-height: 21.6px; + margin-bottom: 8px; + } + .teach-page .oppia-teach-testimonials-section .oppia-teach-subtitle { + padding: 0 20px; + } + .teach-page .oppia-teach-features-section { + padding: 0 20px; + } + .teach-page .oppia-teach-features-left { + width: 100%; + } + .teach-page .oppia-teach-features-right { + width: 100%; + } + .teach-page .oppia-teach-features { + gap: 8px; + width: 97%; + } + .teach-page .oppia-teach-cta-section { + padding: 56px 20px; + } + .teach-page .oppia-teach-cta-section .oppia-teach-subtitle { + margin-bottom: 16px; + } + .teach-page .oppia-teach-cta-buttons-container { + flex-direction: column; + gap: 8px; + width: 100%; + } + .teach-page .oppia-teach-lesson-section .oppia-teach-btn, + .teach-page .oppia-teach-cta-section .oppia-teach-btn { + width: 100%; + } +} + +@media only screen and (max-width: 324px) { + .teach-page .oppia-teach-btn { + max-width: 100%; + min-width: 0; + } +} diff --git a/core/templates/pages/teach-page/teach-page.component.html b/core/templates/pages/teach-page/teach-page.component.html index fef41dec87ad..c7663b06076d 100644 --- a/core/templates/pages/teach-page/teach-page.component.html +++ b/core/templates/pages/teach-page/teach-page.component.html @@ -1,1016 +1,309 @@
-
-
-

-
-

-

-
-
-
- -
-
-
- -
+
+
+

+ {{ 'I18N_TEACH_PAGE_HEADING' | translate }} +

+

+ {{ 'I18N_TEACH_PAGE_HERO_SUBTEXT' | translate }} +

+
-
-

-

-

-

-
-
- -
+
+

+ {{ 'I18N_TEACH_PAGE_TIPS_TITLE' | translate }} +

+
+
+

+ {{ 'I18N_TEACH_PAGE_TIPS_GUIDE_TITLE' | translate }} +

+

+ {{ 'I18N_TEACH_PAGE_TIPS_GUIDE_CONTENT' | translate }} +

+ +
-
- +
+

+ {{ 'I18N_TEACH_PAGE_TIPS_BLOG_TITLE' | translate }} +

+

+ {{ 'I18N_TEACH_PAGE_TIPS_BLOG_CONTENT' | translate }} +

+ +
- -
- - - - Photo of young girl in front of laptop with Oppia webpage - -
- -
- - - - Photo of young girl in front of laptop with Oppia webpage - -
-
-
- Illustration of a young person in front of part of Oppia fraction lesson -
-
-

-
- Illustration of first bullet point -
-

-

+
+

+ {{ 'I18N_TEACH_PAGE_CREATORS_SECTION_TITLE' | translate }} +

+ +
+ + +
+
-
-
-

-
-
- Illustration of first bullet point -
-

+
+
+

+ Lessons made by the Oppia team +

+

+ Tested and verified lessons +

+

+ In the Classroom, discover lessons reviewed by teachers and experts. Classroom lessons help build foundational skills, allowing learners to tackle more advanced concepts in a subject later on. +

+
+
+
+

+ The lesson creation process +

+
+ +
-
- Illustration of second bullet point -

-
-
- Illustration of third bullet point -
-

+
+

+ Check our lessons available here +

+
+ + + + Oppia Math classroom page +
+ +
-
-
-

-

-
-
- -
-
+
+
+

+ {{ 'I18N_TEACH_PAGE_OUTCOMES_SECTION_TITLE' | translate }} +

+

+ {{ 'I18N_TEACH_PAGE_OUTCOMES_SECTION_CONTENT' | translate }} +

-
- - - - Screenshot of Oppia lesson flow - -
-
- - - - Screenshot of Oppia lesson flow - -
-
-

-

-
-
- -
+
+

+ {{ 'I18N_TEACH_PAGE_OUTCOMES_SECTION_RCT_HEADING' | translate }} +

+

+ {{ 'I18N_TEACH_PAGE_OUTCOMES_SECTION_FRACTIONS_CONTENT' | translate }} +

+
+

+ {{ 'I18N_TEACH_PAGE_OUTCOMES_SECTION_FRACTIONS_RCT_HEADING' | translate }} +

+
+
+ + + + Legend for RCT outcomes + +
+
+
+ + + + Pre-test outcomes + +
+
+ + + + Post-test outcomes + +
+
+
+

+ {{ 'I18N_TEACH_PAGE_OUTCOMES_SECTION_FRACTIONS_RCT_CONTENT' | translate }} +

-
-
-

-

-
-
- -
-
-
-
- - - - Screenshot of Oppia lesson cards - -
-
- - - - Screenshot of Oppia lesson cards - -
-
-

-

-
-
- -
-
+
+

+ Teacher and parent testimonials +

+
+ + + +
+
+
+ + + + + +
+
+

+ {{ testimonial.personDetails | translate }} +

+

+ {{ testimonial.role | translate }} +

+

+ {{ testimonial.quote | translate }} +

+
+
+

+ {{ testimonial.quote | translate }} +

+
+
+
+
-
-
-

-

- -

- -
- - -
-
-
- - - - +
+
+ + + + Illustration of a young person in front of part of Oppia Fractions lesson
- -
-
- - - - - -
-
-

-

- -

- -
- - +
+

+ {{ 'I18N_TEACH_PAGE_FEATURES_SECTION_TITLE' | translate }} +

+
+
+ Illustration of first bullet point +

+ {{ 'I18N_TEACH_BENEFITS_ONE' | translate }} +

+
+
+ Illustration of second bullet point +

+ {{ 'I18N_TEACH_BENEFITS_TWO' | translate }} +

+
+
+ Illustration of third bullet point +

+ {{ 'I18N_TEACH_BENEFITS_THREE' | translate }} +

-
-
-

-
-
- -
-
-
- -
-

-
-
- -
-
+
+

+ {{ 'I18N_TEACH_PAGE_ACTION_START_LEARNING' | translate }} +

+
+ + + +
-
- - +
diff --git a/core/templates/pages/teach-page/teach-page.component.spec.ts b/core/templates/pages/teach-page/teach-page.component.spec.ts index fc641b0963ed..472cc43a6389 100644 --- a/core/templates/pages/teach-page/teach-page.component.spec.ts +++ b/core/templates/pages/teach-page/teach-page.component.spec.ts @@ -15,7 +15,7 @@ /** * @fileoverview Unit tests for the teach page. */ -import {EventEmitter} from '@angular/core'; +import {EventEmitter, NO_ERRORS_SCHEMA, Renderer2} from '@angular/core'; import {HttpClientTestingModule} from '@angular/common/http/testing'; import {TestBed, fakeAsync, flushMicrotasks} from '@angular/core/testing'; import {I18nLanguageCodeService} from 'services/i18n-language-code.service'; @@ -59,6 +59,10 @@ class MockI18nLanguageCodeService { return 'en'; } + isCurrentLanguageRTL() { + return false; + } + get onI18nLanguageCodeChange() { return this.codeChangeEventEmiiter; } @@ -71,6 +75,9 @@ describe('Teach Page', () => { let windowDimensionsService: WindowDimensionsService; let windowRef: MockWindowRef; let resizeEvent = new Event('resize'); + let i18nLanguageCodeService: I18nLanguageCodeService; + let renderer: Renderer2; + beforeEach(async () => { windowRef = new MockWindowRef(); TestBed.configureTestingModule({ @@ -89,11 +96,13 @@ describe('Teach Page', () => { useValue: { isWindowNarrow: () => true, getResizeEvent: () => of(resizeEvent), + getWidth: () => 0, }, }, SiteAnalyticsService, UrlInterpolationService, ], + schemas: [NO_ERRORS_SCHEMA], }).compileComponents(); }); beforeEach(angular.mock.module('oppia')); @@ -106,12 +115,23 @@ describe('Teach Page', () => { userService = TestBed.get(UserService); windowDimensionsService = TestBed.get(WindowDimensionsService); siteAnalyticsService = TestBed.inject(SiteAnalyticsService); + i18nLanguageCodeService = TestBed.inject(I18nLanguageCodeService); }); let component: TeachPageComponent; beforeEach(() => { let teachPageComponent = TestBed.createComponent(TeachPageComponent); component = teachPageComponent.componentInstance; + component.creatorsCarouselContainer = { + nativeElement: { + clientWidth: 500, + scrollLeft: 0, + scrollWidth: 1000, + addEventListener: (event: string, callback: () => void) => {}, + removeEventListener: (event: string, callback: () => void) => {}, + }, + }; + renderer = teachPageComponent.componentRef.injector.get(Renderer2); }); it('should successfully instantiate the component from beforeEach block', () => { @@ -126,7 +146,6 @@ describe('Teach Page', () => { it('should set component properties when ngOnInit() is called', () => { component.ngOnInit(); expect(component.displayedTestimonialId).toBe(0); - expect(component.testimonialCount).toBe(3); expect(component.classroomUrl).toBe('/learn/math'); spyOn(windowDimensionsService, 'isWindowNarrow').and.callThrough; expect(windowDimensionsService.isWindowNarrow()).toHaveBeenCalled; @@ -242,33 +261,255 @@ describe('Teach Page', () => { ).toHaveBeenCalled(); }); - it('should increment and decrement testimonial IDs correctly', () => { + it('should direct users to the android page on click', function () { + expect(windowRef.nativeWindow.location.href).not.toEqual('/android'); + + component.onClickAccessAndroidButton(); + + expect(windowRef.nativeWindow.location.href).toEqual('/android'); + }); + + it('should set screen type to mobile when window width is less than or equal to 360', () => { + spyOn(windowDimensionsService, 'getWidth').and.returnValue(360); + component.setScreenType(); + expect(component.screenType).toEqual('mobile'); + }); + + it('should set screen type to tablet when window width is between 361 and 768', () => { + spyOn(windowDimensionsService, 'getWidth').and.returnValue(765); + component.setScreenType(); + expect(component.screenType).toEqual('tablet'); + }); + + it('should set screen type to desktop when window width is greater than 768', () => { + spyOn(windowDimensionsService, 'getWidth').and.returnValue(1280); + component.setScreenType(); + expect(component.screenType).toEqual('desktop'); + }); + + it('should not change arrows disabled status when screen type is desktop', () => { + component.screenType = 'desktop'; + const initialLeftArrowStatus = + component.creatorsCarouselLeftArrowIsDisabled; + const initialRightArrowStatus = + component.creatorsCarouselRightArrowIsDisabled; + component.toggleCreatorsCarouselArrowsDisablityStatusMobile(); + expect(component.creatorsCarouselLeftArrowIsDisabled).toEqual( + initialLeftArrowStatus + ); + expect(component.creatorsCarouselRightArrowIsDisabled).toEqual( + initialRightArrowStatus + ); + }); + + it( + 'should Creators Carousel arrows disablity Status correctly, ' + + 'when active slide index is 0 & screen is not desktop', + () => { + component.screenType = 'mobile'; + component.activeCreatorsSlideIndex = 0; + component.toggleCreatorsCarouselArrowsDisablityStatusMobile(); + expect(component.creatorsCarouselLeftArrowIsDisabled).toBeTrue(); + expect(component.creatorsCarouselRightArrowIsDisabled).toBeFalse(); + } + ); + + it( + 'should Creators Carousel arrows disablity Status correctly, ' + + 'when active slide index is last & screen is not desktop', + () => { + component.screenType = 'mobile'; + component.activeCreatorsSlideIndex = + component.creatorsIndicesObject.mobile.length - 1; + component.toggleCreatorsCarouselArrowsDisablityStatusMobile(); + expect(component.creatorsCarouselLeftArrowIsDisabled).toBeFalse(); + expect(component.creatorsCarouselRightArrowIsDisabled).toBeTrue(); + } + ); + + it('should disable left arrow when scroll position is at start and screen is desktop', () => { + component.screenType = 'desktop'; + component.toggleCreatorsCarouselArrowsDisablityStatusDesktop(); + expect(component.creatorsCarouselLeftArrowIsDisabled).toBeTrue(); + }); + + it('should disable right arrow when scroll position is at end and screen is desktop', () => { + component.screenType = 'desktop'; + component.creatorsCarouselContainer.nativeElement.scrollLeft = 500; + component.toggleCreatorsCarouselArrowsDisablityStatusDesktop(); + expect(component.creatorsCarouselRightArrowIsDisabled).toBeTrue(); + }); + + it('should not change arrows disabled status when screen type is not desktop', () => { + component.screenType = 'mobile'; + const initialLeftArrowStatus = + component.creatorsCarouselLeftArrowIsDisabled; + const initialRightArrowStatus = + component.creatorsCarouselRightArrowIsDisabled; + component.toggleCreatorsCarouselArrowsDisablityStatusDesktop(); + expect(component.creatorsCarouselLeftArrowIsDisabled).toEqual( + initialLeftArrowStatus + ); + expect(component.creatorsCarouselRightArrowIsDisabled).toEqual( + initialRightArrowStatus + ); + }); + + it('should set scrollLeft to 0 for desktop', () => { component.ngOnInit(); - expect(component.displayedTestimonialId).toBe(0); - component.incrementDisplayedTestimonialId(); - expect(component.displayedTestimonialId).toBe(1); - component.incrementDisplayedTestimonialId(); - // Add back after testimonials are complete. - // component.incrementDisplayedTestimonialId(); - component.incrementDisplayedTestimonialId(); - expect(component.displayedTestimonialId).toBe(0); + component.ngAfterViewInit(); + component.screenType = 'desktop'; + spyOn(renderer, 'setProperty'); + component.showPreviousCreators(); + expect(renderer.setProperty).toHaveBeenCalledWith( + jasmine.any(Object), + 'scrollLeft', + 0 + ); + expect(component.toggleCreatorsCarouselArrowsDisablityStatusDesktop) + .toHaveBeenCalled; + }); - component.decrementDisplayedTestimonialId(); - expect(component.displayedTestimonialId).toBe(2); - component.decrementDisplayedTestimonialId(); - expect(component.displayedTestimonialId).toBe(1); + it('should decrement activeCreatorsSlideIndex when screenType is not desktop and index is not 0', () => { + component.ngOnInit(); + component.ngAfterViewInit(); + component.screenType = 'mobile'; + component.activeCreatorsSlideIndex = 1; + component.showPreviousCreators(); + expect(component.activeCreatorsSlideIndex).toBe(0); + expect(component.setActiveCreatorsIndices).toHaveBeenCalled; + expect(component.toggleCreatorsCarouselArrowsDisablityStatusMobile) + .toHaveBeenCalled; }); - it('should get testimonials correctly', () => { + it('should not decrement activeCreatorsSlideIndex when screenType is not desktop and index is 0', () => { component.ngOnInit(); - expect(component.getTestimonials().length).toBe(component.testimonialCount); + component.ngAfterViewInit(); + component.screenType = 'mobile'; + component.activeCreatorsSlideIndex = 0; + component.showPreviousCreators(); + expect(component.activeCreatorsSlideIndex).toBe(0); + expect(component.setActiveCreatorsIndices).not.toHaveBeenCalled; + expect(component.toggleCreatorsCarouselArrowsDisablityStatusMobile).not + .toHaveBeenCalled; }); - it('should direct users to the android page on click', function () { - expect(windowRef.nativeWindow.location.href).not.toEqual('/android'); + it('should set scrollLeft to scroll width for desktop for non RTL screen', () => { + component.ngOnInit(); + component.ngAfterViewInit(); + component.screenType = 'desktop'; + spyOn(i18nLanguageCodeService, 'isCurrentLanguageRTL').and.returnValue( + false + ); + spyOn(renderer, 'setProperty'); + component.showNextCreators(); + expect(renderer.setProperty).toHaveBeenCalledWith( + jasmine.any(Object), + 'scrollLeft', + component.creatorsCarouselContainer.nativeElement.scrollWidth + ); + expect(component.toggleCreatorsCarouselArrowsDisablityStatusDesktop) + .toHaveBeenCalled; + }); - component.onClickAccessAndroidButton(); + it('should set scrollLeft to (-ve) of scroll width for desktop for RTL screen', () => { + component.ngOnInit(); + component.ngAfterViewInit(); + component.screenType = 'desktop'; + spyOn(i18nLanguageCodeService, 'isCurrentLanguageRTL').and.returnValue( + true + ); + spyOn(renderer, 'setProperty'); + component.showNextCreators(); + expect(renderer.setProperty).toHaveBeenCalledWith( + jasmine.any(Object), + 'scrollLeft', + -component.creatorsCarouselContainer.nativeElement.scrollWidth + ); + expect(component.toggleCreatorsCarouselArrowsDisablityStatusDesktop) + .toHaveBeenCalled; + }); - expect(windowRef.nativeWindow.location.href).toEqual('/android'); + it('should increment activeCreatorsSlideIndex when screenType is not desktop and index is less than length', () => { + component.ngOnInit(); + component.ngAfterViewInit(); + component.screenType = 'mobile'; + component.activeCreatorsSlideIndex = 0; + component.showNextCreators(); + expect(component.activeCreatorsSlideIndex).toBe(1); + expect(component.setActiveCreatorsIndices).toHaveBeenCalled; + expect(component.toggleCreatorsCarouselArrowsDisablityStatusMobile) + .toHaveBeenCalled; + }); + + it('should not decrement activeCreatorsSlideIndex when screenType is not desktop and index is 0', () => { + component.ngOnInit(); + component.ngAfterViewInit(); + component.screenType = 'mobile'; + const lastIndex = component.creatorsIndicesObject.mobile.length - 1; + component.activeCreatorsSlideIndex = lastIndex; + component.showNextCreators(); + expect(component.activeCreatorsSlideIndex).toBe(lastIndex); + expect(component.setActiveCreatorsIndices).not.toHaveBeenCalled; + expect(component.toggleCreatorsCarouselArrowsDisablityStatusMobile).not + .toHaveBeenCalled; + }); + + it('should set activeCreatorsIndices for mobile screen type', () => { + component.screenType = 'tablet'; + component.activeCreatorsSlideIndex = 0; + component.setActiveCreatorsIndices(); + expect(component.activeCreatorsIndices).toEqual([0, 1, 2]); + }); + + it('should set activeCreatorsIndices for desktop screen type', () => { + component.screenType = 'mobile'; + component.activeCreatorsSlideIndex = 1; + component.setActiveCreatorsIndices(); + expect(component.activeCreatorsIndices).toEqual([2, 3]); + }); + + it('should move the correct testimonials carousel to the previous slide', () => { + component.testimonialsCarousel = jasmine.createSpyObj('NgbCarousel', [ + 'prev', + ]); + + component.moveTestimonialCarouselToPreviousSlide(); + expect(component.testimonialsCarousel.prev).toHaveBeenCalled(); + }); + + it('should move the correct testimonials carousel to the next slide', () => { + component.testimonialsCarousel = jasmine.createSpyObj('NgbCarousel', [ + 'next', + ]); + + component.moveTestimonialCarouselToNextSlide(); + expect(component.testimonialsCarousel.next).toHaveBeenCalled(); + }); + + it('should get the correct RTL status if the current language is RTL', () => { + spyOn(i18nLanguageCodeService, 'isCurrentLanguageRTL').and.returnValue( + true + ); + expect(component.isLanguageRTL()).toBeTrue(); + }); + + it('should get the correct RTL status if the current language is not RTL', () => { + spyOn(i18nLanguageCodeService, 'isCurrentLanguageRTL').and.returnValue( + false + ); + expect(component.isLanguageRTL()).toBeFalse(); + }); + + it('should unsubscribe on component destruction', () => { + component.directiveSubscriptions.add( + windowDimensionsService.getResizeEvent().subscribe(() => { + component.setScreenType(); + }) + ); + + component.ngOnDestroy(); + + expect(component.directiveSubscriptions.closed).toBe(true); }); }); diff --git a/core/templates/pages/teach-page/teach-page.component.ts b/core/templates/pages/teach-page/teach-page.component.ts index 847e16a09d2d..3397f719cffa 100644 --- a/core/templates/pages/teach-page/teach-page.component.ts +++ b/core/templates/pages/teach-page/teach-page.component.ts @@ -15,7 +15,15 @@ /** * @fileoverview Component for the teach page. */ -import {Component, OnInit} from '@angular/core'; +import { + AfterViewInit, + Component, + ElementRef, + OnDestroy, + OnInit, + Renderer2, + ViewChild, +} from '@angular/core'; import {downgradeComponent} from '@angular/upgrade/static'; import {AppConstants} from 'app.constants'; @@ -25,50 +33,129 @@ import {SiteAnalyticsService} from 'services/site-analytics.service'; import {WindowDimensionsService} from 'services/contextual/window-dimensions.service'; import {LoaderService} from 'services/loader.service'; import {UserService} from 'services/user.service'; +import {I18nLanguageCodeService} from 'services/i18n-language-code.service'; import {Subscription} from 'rxjs'; +import {NgbCarousel} from '@ng-bootstrap/ng-bootstrap'; +import {AccordionPanelData} from 'pages/about-page/data.model'; + +import './teach-page.component.css'; export interface Testimonial { + personDetails: string; + role: + | 'I18N_TEACH_PAGE_TESTIMONIAL_ROLE_TEACHER' + | 'I18N_TEACH_PAGE_TESTIMONIAL_ROLE_PARENT'; quote: string; - studentDetails: string; imageUrl: string; imageUrlWebp: string; - borderPresent: boolean; altText: string; } @Component({ selector: 'teach-page', templateUrl: './teach-page.component.html', - styleUrls: [], + styleUrls: ['./teach-page.component.css'], }) -export class TeachPageComponent implements OnInit { +export class TeachPageComponent implements OnInit, OnDestroy, AfterViewInit { // These properties are initialized using Angular lifecycle hooks // and we need to do non-null assertion. For more information, see // https://github.com/oppia/oppia/wiki/Guide-on-defining-types#ts-7-1 + @ViewChild('creatorsCarouselContainer') + creatorsCarouselContainer!: ElementRef; + @ViewChild('testimonialsCarousel') testimonialsCarousel!: NgbCarousel; + parentsTeachersPdfGuideLink = AppConstants.PARENTS_TEACHERS_PDF_GUIDE_LINK; + teacherStoryTaggedBlogsLink = AppConstants.TEACHER_STORY_TAGGED_BLOGS_LINK; classroomUrlFragment!: string; classroomUrl!: string; + androidUrl = `/${AppConstants.PAGES_REGISTERED_WITH_FRONTEND.ANDROID.ROUTE}`; displayedTestimonialId!: number; libraryUrl!: string; - testimonialCount!: number; - testimonials: Testimonial[] = []; + testimonials: readonly Testimonial[] = []; isWindowNarrow: boolean = false; userIsLoggedIn: boolean = false; directiveSubscriptions = new Subscription(); + lessonCreationData: AccordionPanelData[] = [ + { + title: 'I18N_TEACH_PAGE_LESSON_CREATION_STEP_1_TITLE', + text: 'I18N_TEACH_PAGE_LESSON_CREATION_STEP_1_TEXT', + customPanelClassNames: ['oppia-teach-lesson-panel'], + customTitleClassNames: ['oppia-teach-lesson-panel-title'], + image: '/teach/skill-tree-image', + altText: 'Skill tree image', + panelIsCollapsed: true, + }, + { + title: 'I18N_TEACH_PAGE_LESSON_CREATION_STEP_2_TITLE', + text: 'I18N_TEACH_PAGE_LESSON_CREATION_STEP_2_TEXT', + customPanelClassNames: ['oppia-teach-lesson-panel'], + customTitleClassNames: ['oppia-teach-lesson-panel-title'], + image: '/teach/skill-table-image', + altText: 'Skill table image', + panelIsCollapsed: true, + }, + { + title: 'I18N_TEACH_PAGE_LESSON_CREATION_STEP_3_TITLE', + text: 'I18N_TEACH_PAGE_LESSON_CREATION_STEP_3_TEXT', + customPanelClassNames: ['oppia-teach-lesson-panel'], + customTitleClassNames: ['oppia-teach-lesson-panel-title'], + panelIsCollapsed: true, + }, + { + title: 'I18N_TEACH_PAGE_LESSON_CREATION_STEP_4_TITLE', + text: 'I18N_TEACH_PAGE_LESSON_CREATION_STEP_4_TEXT', + customPanelClassNames: ['oppia-teach-lesson-panel'], + customTitleClassNames: ['oppia-teach-lesson-panel-title'], + panelIsCollapsed: true, + }, + { + title: 'I18N_TEACH_PAGE_LESSON_CREATION_STEP_5_TITLE', + text: 'I18N_TEACH_PAGE_LESSON_CREATION_STEP_5_TEXT', + customPanelClassNames: ['oppia-teach-lesson-panel'], + customTitleClassNames: ['oppia-teach-lesson-panel-title'], + panelIsCollapsed: true, + }, + { + title: 'I18N_TEACH_PAGE_LESSON_CREATION_STEP_6_TITLE', + text: 'I18N_TEACH_PAGE_LESSON_CREATION_STEP_6_TEXT', + customPanelClassNames: ['oppia-teach-lesson-panel'], + customTitleClassNames: ['oppia-teach-lesson-panel-title'], + panelIsCollapsed: true, + }, + ]; + creatorsData = AppConstants.LESSON_CREATORS_DATA_TEACH_PAGE; + screenType!: 'desktop' | 'tablet' | 'mobile'; + creatorsIndicesObject = { + desktop: [[0, 1, 2, 3, 4, 5]], + tablet: [ + [0, 1, 2], + [3, 4, 5], + ], + mobile: [ + [0, 1], + [2, 3], + [4, 5], + ], + }; + activeCreatorsSlideIndex = 0; + activeCreatorsIndices!: number[]; + creatorsCarouselLeftArrowIsDisabled = true; + creatorsCarouselRightArrowIsDisabled = false; constructor( private siteAnalyticsService: SiteAnalyticsService, private urlInterpolationService: UrlInterpolationService, - private windowDimensionService: WindowDimensionsService, + private windowDimensionsService: WindowDimensionsService, private windowRef: WindowRef, private userService: UserService, - private loaderService: LoaderService + private loaderService: LoaderService, + public renderer: Renderer2, + private i18nLanguageCodeService: I18nLanguageCodeService ) {} ngOnInit(): void { this.displayedTestimonialId = 0; - // Change count after all testimonials are available. - this.testimonialCount = 3; - this.testimonials = this.getTestimonials(); + this.setScreenType(); + this.testimonials = AppConstants.TESTIMONIAlS_DATA_TEACHERS; this.classroomUrl = this.urlInterpolationService.interpolateUrl( '/learn/', { @@ -81,61 +168,125 @@ export class TeachPageComponent implements OnInit { this.userIsLoggedIn = userInfo.isLoggedIn(); this.loaderService.hideLoadingScreen(); }); - this.isWindowNarrow = this.windowDimensionService.isWindowNarrow(); + this.isWindowNarrow = this.windowDimensionsService.isWindowNarrow(); this.directiveSubscriptions.add( - this.windowDimensionService.getResizeEvent().subscribe(() => { - this.isWindowNarrow = this.windowDimensionService.isWindowNarrow(); + this.windowDimensionsService.getResizeEvent().subscribe(() => { + this.setScreenType(); + this.isWindowNarrow = this.windowDimensionsService.isWindowNarrow(); }) ); } - // TODO(#11657): Extract the testimonials code into a separate component. - // The 2 functions below are to cycle between values: - // 0 to (testimonialCount - 1) for displayedTestimonialId. - incrementDisplayedTestimonialId(): void { - // This makes sure that incrementing from (testimonialCount - 1) - // returns 0 instead of testimonialCount,since we want the testimonials - // to cycle through. - this.displayedTestimonialId = - (this.displayedTestimonialId + 1) % this.testimonialCount; + ngAfterViewInit(): void { + this.creatorsCarouselContainer.nativeElement.addEventListener( + 'scroll', + this.toggleCreatorsCarouselArrowsDisablityStatusDesktop.bind(this) + ); } - decrementDisplayedTestimonialId(): void { - // This makes sure that decrementing from 0, returns - // (testimonialCount - 1) instead of -1, since we want the testimonials - // to cycle through. - this.displayedTestimonialId = - (this.displayedTestimonialId + this.testimonialCount - 1) % - this.testimonialCount; + setScreenType(): void { + const width = this.windowDimensionsService.getWidth(); + if (width < 361) { + this.screenType = 'mobile'; + } else if (width < 769) { + this.screenType = 'tablet'; + } else { + this.screenType = 'desktop'; + } + this.setActiveCreatorsIndices(); } - getTestimonials(): [Testimonial, Testimonial, Testimonial] { - return [ - { - quote: 'I18N_TEACH_TESTIMONIAL_1', - studentDetails: 'I18N_TEACH_STUDENT_DETAILS_1', - imageUrl: '/teach/riya.jpg', - imageUrlWebp: '/teach/riya.webp', - borderPresent: true, - altText: 'Photo of Riya', - }, - { - quote: 'I18N_TEACH_TESTIMONIAL_2', - studentDetails: 'I18N_TEACH_STUDENT_DETAILS_2', - imageUrl: '/teach/awad.jpg', - imageUrlWebp: '/teach/awad.webp', - borderPresent: true, - altText: 'Photo of Awad', - }, - { - quote: 'I18N_TEACH_TESTIMONIAL_3', - studentDetails: 'I18N_TEACH_STUDENT_DETAILS_3', - imageUrl: '/teach/himanshu.jpg', - imageUrlWebp: '/teach/himanshu.webp', - borderPresent: true, - altText: 'Photo of Himanshu', - }, - ]; + showPreviousCreators(): void { + if (this.screenType === 'desktop') { + this.renderer.setProperty( + this.creatorsCarouselContainer.nativeElement, + 'scrollLeft', + 0 + ); + this.toggleCreatorsCarouselArrowsDisablityStatusDesktop(); + } else { + if (this.activeCreatorsSlideIndex === 0) { + return; + } + this.activeCreatorsSlideIndex--; + this.setActiveCreatorsIndices(); + this.toggleCreatorsCarouselArrowsDisablityStatusMobile(); + } + } + + showNextCreators(): void { + if (this.screenType === 'desktop') { + const scrollWidth = + this.creatorsCarouselContainer.nativeElement.scrollWidth; + if (!this.isLanguageRTL()) { + this.renderer.setProperty( + this.creatorsCarouselContainer.nativeElement, + 'scrollLeft', + scrollWidth + ); + } else { + this.renderer.setProperty( + this.creatorsCarouselContainer.nativeElement, + 'scrollLeft', + -scrollWidth + ); + } + this.toggleCreatorsCarouselArrowsDisablityStatusDesktop(); + } else { + if ( + this.activeCreatorsSlideIndex === + this.creatorsIndicesObject[this.screenType].length - 1 + ) { + return; + } + this.activeCreatorsSlideIndex++; + this.setActiveCreatorsIndices(); + this.toggleCreatorsCarouselArrowsDisablityStatusMobile(); + } + } + + setActiveCreatorsIndices(): void { + this.activeCreatorsIndices = + this.creatorsIndicesObject[this.screenType][ + this.activeCreatorsSlideIndex + ]; + } + + toggleCreatorsCarouselArrowsDisablityStatusMobile(): void { + if (this.screenType === 'desktop') { + return; + } + this.creatorsCarouselLeftArrowIsDisabled = + this.activeCreatorsSlideIndex === 0; + this.creatorsCarouselRightArrowIsDisabled = + this.activeCreatorsSlideIndex === + this.creatorsIndicesObject[this.screenType].length - 1; + } + + toggleCreatorsCarouselArrowsDisablityStatusDesktop(): void { + if (this.screenType !== 'desktop') { + return; + } + // The bitwise OR operator is used to convert the float to an integer. + const scrollLeft = + this.creatorsCarouselContainer.nativeElement.scrollLeft | 0; + const scrollWidth = + this.creatorsCarouselContainer.nativeElement.scrollWidth | 0; + const clientWidth = + this.creatorsCarouselContainer.nativeElement.clientWidth | 0; + + this.creatorsCarouselLeftArrowIsDisabled = scrollLeft === 0; + this.creatorsCarouselRightArrowIsDisabled = + Math.abs(scrollLeft) === Math.abs(scrollWidth - clientWidth); + // Here, the absolute value is used to accomodate the RTL UI logic. + } + + moveTestimonialCarouselToPreviousSlide(): void { + this.testimonialsCarousel.prev(); + } + + moveTestimonialCarouselToNextSlide(): void { + this.testimonialsCarousel.next(); } onClickAccessAndroidButton(): void { @@ -181,6 +332,18 @@ export class TeachPageComponent implements OnInit { getStaticImageUrl(imagePath: string): string { return this.urlInterpolationService.getStaticImageUrl(imagePath); } + + isLanguageRTL(): boolean { + return this.i18nLanguageCodeService.isCurrentLanguageRTL(); + } + + ngOnDestroy(): void { + this.directiveSubscriptions.unsubscribe(); + this.creatorsCarouselContainer.nativeElement.removeEventListener( + 'scroll', + this.toggleCreatorsCarouselArrowsDisablityStatusDesktop.bind(this) + ); + } } angular diff --git a/core/templates/pages/teach-page/teach-page.module.ts b/core/templates/pages/teach-page/teach-page.module.ts index 1aa839b5f4c3..8ef5fa53582f 100644 --- a/core/templates/pages/teach-page/teach-page.module.ts +++ b/core/templates/pages/teach-page/teach-page.module.ts @@ -22,9 +22,15 @@ import {SharedComponentsModule} from 'components/shared-component.module'; import {TeachPageRootComponent} from './teach-page-root.component'; import {CommonModule} from '@angular/common'; import {TeachPageRoutingModule} from './teach-page-routing.module'; +import {NgbModule} from '@ng-bootstrap/ng-bootstrap'; @NgModule({ - imports: [CommonModule, SharedComponentsModule, TeachPageRoutingModule], + imports: [ + CommonModule, + SharedComponentsModule, + TeachPageRoutingModule, + NgbModule, + ], declarations: [TeachPageComponent, TeachPageRootComponent], entryComponents: [TeachPageComponent, TeachPageRootComponent], }) diff --git a/core/tests/puppeteer-acceptance-tests/specs/logged-out-user/click-all-buttons-on-teach-page.spec.ts b/core/tests/puppeteer-acceptance-tests/specs/logged-out-user/click-all-buttons-on-teach-page.spec.ts index 9eaa81fe8107..ae2926cdeed9 100644 --- a/core/tests/puppeteer-acceptance-tests/specs/logged-out-user/click-all-buttons-on-teach-page.spec.ts +++ b/core/tests/puppeteer-acceptance-tests/specs/logged-out-user/click-all-buttons-on-teach-page.spec.ts @@ -42,38 +42,6 @@ describe('Logged-out User in Teach page', function () { await loggedOutUser.navigateToTeachPage(); }, DEFAULT_SPEC_TIMEOUT_MSECS); - it( - 'should open the Math Classroom page when "Browse Our Lessons" button is clicked', - async function () { - await loggedOutUser.clickBrowseOurLessonsButtonInTeachPage(); - }, - DEFAULT_SPEC_TIMEOUT_MSECS - ); - - it( - 'should open the Android page when "Access Android App" button is clicked', - async function () { - await loggedOutUser.clickAccessAndroidAppButtonInTeachPage(); - }, - DEFAULT_SPEC_TIMEOUT_MSECS - ); - - it( - 'should open the Math Classroom page when "Visit Classroom" button is clicked', - async function () { - await loggedOutUser.clickVisitClassroomButtonInTeachPage(); - }, - DEFAULT_SPEC_TIMEOUT_MSECS - ); - - it( - 'should open the Community Library page when "Browse Library" button is clicked', - async function () { - await loggedOutUser.clickBrowseLibraryButtonInTeachPage(); - }, - DEFAULT_SPEC_TIMEOUT_MSECS - ); - it( 'should open the Math Classroom page when "Explore Lessons" button is clicked', async function () { diff --git a/core/tests/puppeteer-acceptance-tests/utilities/user/logged-out-user.ts b/core/tests/puppeteer-acceptance-tests/utilities/user/logged-out-user.ts index 5aae611e61f7..0051b38e428d 100644 --- a/core/tests/puppeteer-acceptance-tests/utilities/user/logged-out-user.ts +++ b/core/tests/puppeteer-acceptance-tests/utilities/user/logged-out-user.ts @@ -21,7 +21,6 @@ import testConstants from '../common/test-constants'; import {showMessage} from '../common/show-message'; const aboutUrl = testConstants.URLs.About; -const androidUrl = testConstants.URLs.Android; const blogPostUrlinPartnershipsPage = testConstants.URLs.BlogPostUrlInPartnershipsPage; const creatorDashboardCreateModeUrl = @@ -138,26 +137,8 @@ const mobileSidevbarGetInvolvedMenuDonateButton = 'a.e2e-mobile-test-sidebar-get-involved-menu-donate-button'; const mobileSidebarGetInvolvedMenuContactUsButton = 'a.e2e-mobile-test-sidebar-get-involved-menu-contact-us-button'; -const browseOurLessonsDesktopButtonInTeachPage = - '.e2e-test-teach-page-browse-our-lessons-desktop-button'; -const browseOurLessonsMobileButtonInTeachPage = - '.e2e-test-teach-page-browse-our-lessons-mobile-button'; -const accessAndroidAppDesktopButtonInTeachPage = - '.e2e-test-teach-page-access-android-app-desktop-button'; -const accessAndroidAppMobileButtonInTeachPage = - '.e2e-test-teach-page-access-android-app-mobile-button'; -const visitClassroomDesktopButtonInTeachPage = - '.e2e-test-teach-page-visit-classroom-desktop-button'; -const visitClassroomMobileButtonInTeachPage = - '.e2e-test-teach-page-visit-classroom-mobile-button'; -const exploreLessonsDesktopButtonInTeachPage = - '.e2e-test-teach-page-explore-lessons-desktop-button'; -const exploreLessonsMobileButtonInTeachPage = - '.e2e-test-teach-page-explore-lessons-mobile-button'; -const browseLibraryDesktopButtonInTeachPage = - '.e2e-test-teach-page-browse-library-desktop-button'; -const browseLibraryMobileButtonInTeachPage = - '.e2e-test-teach-page-browse-library-mobile-button'; +const exploreLessonsButtonInTeachPage = + '.e2e-test-teach-page-explore-lessons-button'; const partnerWithUsButtonAtTheTopOfPartnershipsPage = '.e2e-test-partnerships-page-partner-with-us-button-at-the-top'; const partnerWithUsButtonAtTheBottomOfPartnershipsPage = @@ -1251,78 +1232,11 @@ export class LoggedOutUser extends BaseUser { ); } - /** - * Function to click the Browse Our Lessons button in the Teach page - * and check if it opens the Math Classroom page. - */ - async clickBrowseOurLessonsButtonInTeachPage(): Promise { - const browseOurLessonsButtonInTeachPage = this.isViewportAtMobileWidth() - ? browseOurLessonsMobileButtonInTeachPage - : browseOurLessonsDesktopButtonInTeachPage; - await this.clickButtonToNavigateToNewPage( - browseOurLessonsButtonInTeachPage, - 'Browse Our Lessons button', - mathClassroomUrl, - 'Math Classroom' - ); - } - - /** - * Function to click the Access Android App button in the Teach page - * and check if it opens the Android page. - */ - async clickAccessAndroidAppButtonInTeachPage(): Promise { - const accessAndroidAppButtonInTeachPage = this.isViewportAtMobileWidth() - ? accessAndroidAppMobileButtonInTeachPage - : accessAndroidAppDesktopButtonInTeachPage; - await this.clickButtonToNavigateToNewPage( - accessAndroidAppButtonInTeachPage, - 'Access the Android App button', - androidUrl, - 'Android' - ); - } - - /** - * Function to click the Visit Classroom button in the Teach page - * and check if it opens the Math Classroom page. - */ - async clickVisitClassroomButtonInTeachPage(): Promise { - const visitClassroomButtonInTeachPage = this.isViewportAtMobileWidth() - ? visitClassroomMobileButtonInTeachPage - : visitClassroomDesktopButtonInTeachPage; - await this.clickButtonToNavigateToNewPage( - visitClassroomButtonInTeachPage, - 'Visit Classroom button', - mathClassroomUrl, - 'Math Classroom' - ); - } - - /** - * Function to click the Browse Library button in the Teach page - * and check if it opens the Community Library page. - */ - async clickBrowseLibraryButtonInTeachPage(): Promise { - const browseLibraryButtonInTeachPage = this.isViewportAtMobileWidth() - ? browseLibraryMobileButtonInTeachPage - : browseLibraryDesktopButtonInTeachPage; - await this.clickButtonToNavigateToNewPage( - browseLibraryButtonInTeachPage, - 'Browse Library button', - communityLibraryUrl, - 'Community Library' - ); - } - /** * Function to click the Browse Our Lessons button in the Teach page * and check if it opens the Math Classroom page. */ async clickExploreLessonsButtonInTeachPage(): Promise { - const exploreLessonsButtonInTeachPage = this.isViewportAtMobileWidth() - ? exploreLessonsMobileButtonInTeachPage - : exploreLessonsDesktopButtonInTeachPage; await this.clickButtonToNavigateToNewPage( exploreLessonsButtonInTeachPage, 'Explore Lessons button', diff --git a/core/tests/test-modules-mappings/acceptance/logged-out-user/click-all-buttons-on-teach-page.txt b/core/tests/test-modules-mappings/acceptance/logged-out-user/click-all-buttons-on-teach-page.txt index 5ab4c7ad2ea1..f8d9c3004f98 100644 --- a/core/tests/test-modules-mappings/acceptance/logged-out-user/click-all-buttons-on-teach-page.txt +++ b/core/tests/test-modules-mappings/acceptance/logged-out-user/click-all-buttons-on-teach-page.txt @@ -1,4 +1,2 @@ -core/templates/pages/android-page/android-page.module.ts core/templates/pages/classroom-page/classroom-page.module.ts -core/templates/pages/library-page/library-page.module.ts core/templates/pages/teach-page/teach-page.module.ts