codeforlife-portal 5.33.5__py2.py3-none-any.whl → 8.9.9__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- cfl_common/common/__init__.py +1 -0
- cfl_common/common/app_settings.py +66 -0
- cfl_common/common/apps.py +6 -0
- cfl_common/common/context_processors.py +9 -0
- cfl_common/common/csp_config.py +85 -0
- cfl_common/common/helpers/__init__.py +0 -0
- cfl_common/common/helpers/data_migration_loader.py +42 -0
- cfl_common/common/helpers/emails.py +393 -0
- cfl_common/common/helpers/generators.py +52 -0
- cfl_common/common/helpers/organisation.py +10 -0
- cfl_common/common/mail.py +201 -0
- cfl_common/common/migrations/0001_initial.py +240 -0
- cfl_common/common/migrations/0002_emailverification.py +55 -0
- cfl_common/common/migrations/0003_aimmocharacter.py +31 -0
- cfl_common/common/migrations/0004_add_aimmocharacters.py +17 -0
- cfl_common/common/migrations/0005_add_worksheets.py +8 -0
- cfl_common/common/migrations/0006_update_aimmo_character_image_path.py +17 -0
- cfl_common/common/migrations/0007_add_pdf_names_to_first_two_worksheets.py +8 -0
- cfl_common/common/migrations/0008_unlock_worksheet_3.py +11 -0
- cfl_common/common/migrations/0009_add_blocked_time_to_teacher_and_student.py +24 -0
- cfl_common/common/migrations/0010_remove_teacher_title.py +18 -0
- cfl_common/common/migrations/0011_student_login_id.py +18 -0
- cfl_common/common/migrations/0012_usersession.py +39 -0
- cfl_common/common/migrations/0013_class_school.py +42 -0
- cfl_common/common/migrations/0014_login_type.py +29 -0
- cfl_common/common/migrations/0015_dailyactivity.py +31 -0
- cfl_common/common/migrations/0016_joinreleasestudent.py +42 -0
- cfl_common/common/migrations/0017_copy_email_to_username.py +18 -0
- cfl_common/common/migrations/0018_update_aimmo_character_image_path.py +15 -0
- cfl_common/common/migrations/0019_aimmocharacter_alt.py +16 -0
- cfl_common/common/migrations/0020_class_is_active_and_null_access_code.py +23 -0
- cfl_common/common/migrations/0021_school_is_active.py +28 -0
- cfl_common/common/migrations/0022_school_cleanup.py +29 -0
- cfl_common/common/migrations/0023_userprofile_aimmo_badges.py +22 -0
- cfl_common/common/migrations/0024_teacher_invited_by.py +25 -0
- cfl_common/common/migrations/0025_schoolteacherinvitation.py +47 -0
- cfl_common/common/migrations/0026_teacher_remove_join_request.py +22 -0
- cfl_common/common/migrations/0027_class_created_by.py +25 -0
- cfl_common/common/migrations/0028_coding_club_downloads.py +23 -0
- cfl_common/common/migrations/0029_dynamicelement.py +22 -0
- cfl_common/common/migrations/0030_add_maintenance_banner.py +25 -0
- cfl_common/common/migrations/0031_improve_admin_panel.py +56 -0
- cfl_common/common/migrations/0032_dailyactivity_level_control_submits.py +18 -0
- cfl_common/common/migrations/0033_password_reset_tracking_fields.py +23 -0
- cfl_common/common/migrations/0034_dailyactivity_daily_school_student_lockout_reset.py +18 -0
- cfl_common/common/migrations/0035_rename_lockout_fields.py +27 -0
- cfl_common/common/migrations/0036_rename_awaiting_email_verification_userprofile_is_verified.py +17 -0
- cfl_common/common/migrations/0037_migrate_email_verification.py +21 -0
- cfl_common/common/migrations/0038_delete_emailverification.py +16 -0
- cfl_common/common/migrations/0039_copy_email_to_username.py +18 -0
- cfl_common/common/migrations/0040_school_county.py +18 -0
- cfl_common/common/migrations/0041_populate_gb_counties.py +27 -0
- cfl_common/common/migrations/0042_totalactivity.py +25 -0
- cfl_common/common/migrations/0043_add_total_activity.py +30 -0
- cfl_common/common/migrations/0044_update_activity_models.py +33 -0
- cfl_common/common/migrations/0045_otp.py +23 -0
- cfl_common/common/migrations/0046_alter_school_country.py +19 -0
- cfl_common/common/migrations/0047_delete_school_postcode.py +16 -0
- cfl_common/common/migrations/0048_unique_school_names.py +42 -0
- cfl_common/common/migrations/0049_anonymise_orphan_users.py +29 -0
- cfl_common/common/migrations/0050_anonymise_orphan_schools.py +30 -0
- cfl_common/common/migrations/0051_verify_returning_users.py +26 -0
- cfl_common/common/migrations/0052_add_cse_fields.py +68 -0
- cfl_common/common/migrations/0053_clean_class_data.py +24 -0
- cfl_common/common/migrations/0054_delete_aimmo_models.py +20 -0
- cfl_common/common/migrations/0055_alter_schoolteacherinvitation_token.py +18 -0
- cfl_common/common/migrations/0056_set_non_school_teachers_as_non_admins.py +25 -0
- cfl_common/common/migrations/0057_teacher_teacher__is_admin.py +19 -0
- cfl_common/common/migrations/0058_userprofile_google_refresh_token_and_more.py +24 -0
- cfl_common/common/migrations/__init__.py +0 -0
- cfl_common/common/models.py +557 -0
- cfl_common/common/permissions.py +84 -0
- cfl_common/common/tests/__init__.py +0 -0
- cfl_common/common/tests/test_migration_anonymise_orphan_schools.py +30 -0
- cfl_common/common/tests/test_migration_anonymise_orphan_users.py +30 -0
- cfl_common/common/tests/test_migration_blocked_time.py +15 -0
- cfl_common/common/tests/test_migration_remove_teacher_title.py +13 -0
- cfl_common/common/tests/test_migration_unique_school_names.py +33 -0
- cfl_common/common/tests/test_migration_verify_returning_users.py +59 -0
- cfl_common/common/tests/test_models.py +87 -0
- cfl_common/common/tests/utils/__init__.py +0 -0
- cfl_common/common/tests/utils/classes.py +38 -0
- cfl_common/common/tests/utils/email.py +67 -0
- cfl_common/common/tests/utils/organisation.py +41 -0
- cfl_common/common/tests/utils/student.py +123 -0
- cfl_common/common/tests/utils/teacher.py +73 -0
- cfl_common/common/tests/utils/user.py +27 -0
- cfl_common/common/utils.py +56 -0
- cfl_common/setup.py +61 -0
- codeforlife_portal-8.9.9.dist-info/METADATA +226 -0
- {codeforlife_portal-5.33.5.dist-info → codeforlife_portal-8.9.9.dist-info}/RECORD +339 -241
- {codeforlife_portal-5.33.5.dist-info → codeforlife_portal-8.9.9.dist-info}/WHEEL +1 -1
- codeforlife_portal-8.9.9.dist-info/licenses/LICENSE.md +3 -0
- {codeforlife_portal-5.33.5.dist-info → codeforlife_portal-8.9.9.dist-info}/top_level.txt +1 -0
- deploy/middleware/maintenance.py +25 -0
- deploy/middleware/screentime_warning.py +29 -0
- deploy/middleware/security.py +5 -6
- deploy/middleware/session_timeout.py +4 -2
- deploy/middleware/tmp_basic_auth.py +41 -0
- example_project/portal_test_settings.py +239 -0
- example_project/settings.py +156 -17
- example_project/urls.py +5 -6
- portal/__init__.py +1 -1
- portal/admin.py +142 -29
- portal/app_settings.py +8 -7
- portal/forms/dotmailer.py +6 -4
- portal/forms/invite_teacher.py +19 -10
- portal/forms/organisation.py +137 -68
- portal/forms/play.py +53 -98
- portal/forms/registration.py +70 -164
- portal/forms/teach.py +147 -121
- portal/handlers.py +1 -2
- portal/helpers/decorators.py +30 -10
- portal/helpers/password.py +86 -47
- portal/helpers/ratelimit.py +32 -15
- portal/helpers/regexes.py +5 -0
- portal/helpers/request_handlers.py +10 -0
- portal/migrations/0044_auto_20150430_0959.py +6 -2
- portal/mixins/__init__.py +1 -0
- portal/mixins/cron_mixin.py +12 -0
- portal/permissions/__init__.py +1 -0
- portal/permissions/is_cron_request_from_google.py +14 -0
- portal/static/portal/img/10_years_anniversary.png +0 -0
- portal/static/portal/img/RR_logo_grass_background.png +0 -0
- portal/static/portal/img/coding_club_hero.jpg +0 -0
- portal/static/portal/img/coding_club_python_pack.png +0 -0
- portal/static/portal/img/facebook.png +0 -0
- portal/static/portal/img/gitbook.png +0 -0
- portal/static/portal/img/howe_dell_1.png +0 -0
- portal/static/portal/img/howe_dell_2.png +0 -0
- portal/static/portal/img/howe_dell_3.png +0 -0
- portal/static/portal/img/logo_cfl.png +0 -0
- portal/static/portal/img/logo_cfl_powered.svg +35 -0
- portal/static/portal/img/logo_cfl_reminder_cards.jpg +0 -0
- portal/static/portal/img/logo_ocado_group.png +0 -0
- portal/static/portal/img/logo_python_den.svg +21 -0
- portal/static/portal/img/long_europe_map.png +0 -0
- portal/static/portal/img/python_den.png +0 -0
- portal/static/portal/img/python_den_banner.svg +26 -0
- portal/static/portal/img/rapid_router_landing_hero.png +0 -0
- portal/static/portal/img/rr_advanced.png +0 -0
- portal/static/portal/img/ten_year_map_pin.svg +1 -0
- portal/static/portal/img/thumbnail_educate_rapid_router.png +0 -0
- portal/static/portal/img/thumbnail_educate_resources.png +0 -0
- portal/static/portal/img/thumbnail_play_rapid_router.png +0 -0
- portal/static/portal/img/thumbnail_python_den.png +0 -0
- portal/static/portal/img/twitter.png +0 -0
- portal/static/portal/js/carouselCards.js +25 -0
- portal/static/portal/js/common.js +96 -1
- portal/static/portal/js/independentLogin.js +16 -0
- portal/static/portal/js/independentRegistration.js +86 -0
- portal/static/portal/js/levelControl.js +77 -0
- portal/static/portal/js/lib/jquery.min.js +2 -0
- portal/static/portal/js/organisation_manage.js +142 -14
- portal/static/portal/js/passwordStrength.js +154 -64
- portal/static/portal/js/resetPassword.js +23 -0
- portal/static/portal/js/riveted.min.js +238 -239
- portal/static/portal/js/school.js +13 -0
- portal/static/portal/js/studentLogin.js +16 -0
- portal/static/portal/js/teacherEditStudent.js +23 -0
- portal/static/portal/js/teacherLogin.js +16 -0
- portal/static/portal/js/tenYearMap.js +14 -0
- portal/static/portal/sass/colorbox.scss +0 -1
- portal/static/portal/sass/modules/_colours.scss +1 -0
- portal/static/portal/sass/modules/_levels.scss +1 -1
- portal/static/portal/sass/modules/_mixins.scss +21 -0
- portal/static/portal/sass/partials/_banners.scss +4 -177
- portal/static/portal/sass/partials/_buttons.scss +12 -15
- portal/static/portal/sass/partials/_carousel.scss +129 -0
- portal/static/portal/sass/partials/_footer.scss +21 -22
- portal/static/portal/sass/partials/_forms.scss +60 -5
- portal/static/portal/sass/partials/_grids.scss +34 -61
- portal/static/portal/sass/partials/_header.scss +28 -20
- portal/static/portal/sass/partials/_images.scss +292 -39
- portal/static/portal/sass/partials/_popup.scss +18 -15
- portal/static/portal/sass/partials/_tables.scss +12 -20
- portal/static/portal/sass/partials/_text.scss +6 -10
- portal/static/portal/sass/styles.scss +0 -1
- portal/static/portal/video/code for life .pdf +0 -0
- portal/strings/about.py +5 -0
- portal/strings/coding_club.py +9 -0
- portal/strings/play.py +6 -5
- portal/strings/teach.py +1 -1
- portal/strings/teacher_resources.py +2 -8
- portal/strings/ten_year_map.py +13 -0
- portal/templates/403.html +2 -2
- portal/templates/404.html +1 -1
- portal/templates/500.html +2 -2
- portal/templates/{captcha → django_recaptcha}/includes/js_v2_invisible.html +3 -3
- portal/templates/{captcha → django_recaptcha}/widget_v2_invisible.html +2 -2
- portal/templates/email.html +4 -2
- portal/templates/maintenance.html +34 -0
- portal/templates/portal/about.html +94 -62
- portal/templates/portal/base.html +176 -152
- portal/templates/portal/coding_club.html +100 -0
- portal/templates/portal/contribute.html +56 -52
- portal/templates/portal/email_invitation_sent.html +1 -1
- portal/templates/portal/email_style_template.html +374 -0
- portal/templates/portal/email_verification_failed.html +1 -1
- portal/templates/portal/email_verification_needed.html +9 -9
- portal/templates/portal/form_shapes.html +20 -8
- portal/templates/portal/getinvolved.html +6 -6
- portal/templates/portal/home.html +35 -10
- portal/templates/portal/home_learning.html +19 -19
- portal/templates/portal/locked_out.html +0 -1
- portal/templates/portal/locked_out_school_student.html +16 -0
- portal/templates/portal/login/independent_student.html +31 -15
- portal/templates/portal/login/student.html +10 -7
- portal/templates/portal/login/student_class_code.html +7 -4
- portal/templates/portal/login/teacher.html +34 -17
- portal/templates/portal/partials/banner.html +18 -4
- portal/templates/portal/partials/benefits.html +1 -1
- portal/templates/portal/partials/card_list.html +34 -24
- portal/templates/portal/partials/character_list.html +5 -5
- portal/templates/portal/partials/cookie_list.html +161 -0
- portal/templates/portal/partials/delete_popup.html +18 -0
- portal/templates/portal/partials/footer.html +57 -26
- portal/templates/portal/partials/header.html +118 -117
- portal/templates/portal/partials/hero_card.html +4 -3
- portal/templates/portal/partials/info_popup.html +3 -3
- portal/templates/portal/partials/invite_admin_teacher.html +23 -0
- portal/templates/portal/partials/popup.html +7 -2
- portal/templates/portal/partials/register_newsletter_tickbox.html +2 -5
- portal/templates/portal/partials/screentime_popup.html +14 -0
- portal/templates/portal/partials/service_unavailable_popup.html +17 -0
- portal/templates/portal/partials/session_popup.html +19 -0
- portal/templates/portal/play/student_dashboard.html +42 -29
- portal/templates/portal/play/student_edit_account.html +64 -9
- portal/templates/portal/play.html +61 -41
- portal/templates/portal/privacy_notice.html +697 -0
- portal/templates/portal/register.html +122 -92
- portal/templates/portal/reset_password.html +20 -40
- portal/templates/portal/reset_password_confirm.html +9 -4
- portal/templates/portal/reset_password_email_sent.html +15 -13
- portal/templates/portal/teach/base_registering.html +1 -1
- portal/templates/portal/teach/class.html +4 -6
- portal/templates/portal/teach/dashboard.html +212 -117
- portal/templates/portal/teach/invited.html +90 -0
- portal/templates/portal/teach/onboarding_classes.html +5 -3
- portal/templates/portal/teach/onboarding_print.html +1 -1
- portal/templates/portal/teach/onboarding_school.html +26 -139
- portal/templates/portal/teach/onboarding_students.html +1 -1
- portal/templates/portal/teach/teacher_dismiss_students.html +73 -55
- portal/templates/portal/teach/teacher_edit_class.html +168 -11
- portal/templates/portal/teach/teacher_edit_student.html +12 -5
- portal/templates/portal/teach/teacher_move_all_classes.html +25 -38
- portal/templates/portal/teach/teacher_move_students_to_class.html +1 -1
- portal/templates/portal/teach.html +61 -42
- portal/templates/portal/ten_year_map.html +147 -0
- portal/templates/portal/terms.html +191 -42
- portal/templates/two_factor/core/login.html +71 -59
- portal/templates/two_factor/core/setup.html +58 -49
- portal/templates/two_factor/profile/disable.html +1 -1
- portal/templates/two_factor/profile/profile.html +35 -17
- portal/templatetags/app_tags.py +59 -84
- portal/templatetags/card_list_tags.py +0 -4
- portal/tests/base_test.py +14 -3
- portal/tests/conftest.py +0 -15
- portal/tests/migrations/test_migration_make_portaladmin_teacher.py +2 -6
- portal/tests/migrations/test_migration_preview_users.py +3 -9
- portal/tests/migrations/test_migration_remove_guardian.py +1 -3
- portal/tests/migrations/test_migration_use_common_models.py +2 -6
- portal/tests/migrations/test_migration_verify_portaladmin.py +1 -3
- portal/tests/pageObjects/portal/admin/admin_base_page.py +0 -21
- portal/tests/pageObjects/portal/base_page.py +16 -26
- portal/tests/pageObjects/portal/email_verification_needed_page.py +3 -2
- portal/tests/pageObjects/portal/game_page.py +12 -19
- portal/tests/pageObjects/portal/home_page.py +13 -15
- portal/tests/pageObjects/portal/independent_login_page.py +13 -17
- portal/tests/pageObjects/portal/password_reset_form_page.py +20 -4
- portal/tests/pageObjects/portal/password_reset_page.py +25 -0
- portal/tests/pageObjects/portal/play/account_page.py +18 -27
- portal/tests/pageObjects/portal/play/dashboard_page.py +4 -4
- portal/tests/pageObjects/portal/play/join_school_or_club_page.py +8 -10
- portal/tests/pageObjects/portal/play/play_base_page.py +5 -3
- portal/tests/pageObjects/portal/signup_page.py +28 -59
- portal/tests/pageObjects/portal/student_login_class_code.py +6 -9
- portal/tests/pageObjects/portal/student_login_page.py +6 -8
- portal/tests/pageObjects/portal/teach/add_independent_student_to_class_page.py +3 -3
- portal/tests/pageObjects/portal/teach/added_independent_student_to_class_page.py +3 -1
- portal/tests/pageObjects/portal/teach/class_page.py +36 -13
- portal/tests/pageObjects/portal/teach/dashboard_page.py +43 -84
- portal/tests/pageObjects/portal/teach/dismiss_students_page.py +7 -5
- portal/tests/pageObjects/portal/teach/edit_student_page.py +10 -8
- portal/tests/pageObjects/portal/teach/move_class_page.py +5 -10
- portal/tests/pageObjects/portal/teach/move_classes_page.py +4 -2
- portal/tests/pageObjects/portal/teach/move_students_disambiguate_page.py +4 -2
- portal/tests/pageObjects/portal/teach/move_students_page.py +6 -13
- portal/tests/pageObjects/portal/teach/onboarding_classes_page.py +5 -3
- portal/tests/pageObjects/portal/teach/onboarding_organisation_page.py +11 -49
- portal/tests/pageObjects/portal/teach/onboarding_student_list_page.py +7 -12
- portal/tests/pageObjects/portal/teach/onboarding_students_page.py +4 -27
- portal/tests/pageObjects/portal/teach/teach_base_page.py +6 -4
- portal/tests/pageObjects/portal/teacher_login_page.py +10 -16
- portal/tests/selenium_test_case.py +3 -43
- portal/tests/snapshots/snap_test_partials.py +11 -165
- portal/tests/test_2FA.py +15 -33
- portal/tests/test_admin.py +15 -97
- portal/tests/test_api.py +212 -91
- portal/tests/test_captcha_forms.py +2 -2
- portal/tests/test_class.py +374 -24
- portal/tests/test_emails.py +83 -20
- portal/tests/{test_newsletter_footer.py → test_global_forms.py} +5 -5
- portal/tests/test_helper_methods.py +30 -0
- portal/tests/test_independent_student.py +255 -144
- portal/tests/test_invite_teacher.py +318 -10
- portal/tests/test_middleware.py +96 -9
- portal/tests/test_organisation.py +78 -262
- portal/tests/test_partials.py +0 -88
- portal/tests/test_ratelimit.py +218 -36
- portal/tests/test_school_student.py +35 -40
- portal/tests/test_security.py +12 -31
- portal/tests/test_teacher.py +425 -325
- portal/tests/test_teacher_student.py +103 -91
- portal/tests/test_views.py +900 -76
- portal/tests/utils/classes.py +2 -2
- portal/tests/utils/messages.py +13 -28
- portal/urls.py +235 -166
- portal/views/admin.py +0 -332
- portal/views/api.py +82 -48
- portal/views/cron/__init__.py +1 -0
- portal/views/cron/user.py +322 -0
- portal/views/dotmailer.py +9 -1
- portal/views/email.py +33 -77
- portal/views/google_analytics.py +28 -0
- portal/views/home.py +126 -97
- portal/views/legal.py +13 -0
- portal/views/login/independent_student.py +5 -5
- portal/views/login/student.py +51 -14
- portal/views/login/teacher.py +2 -6
- portal/views/organisation.py +20 -189
- portal/views/registration.py +97 -17
- portal/views/student/edit_account_details.py +99 -72
- portal/views/student/play.py +81 -62
- portal/views/teacher/dashboard.py +421 -149
- portal/views/teacher/teach.py +226 -177
- portal/views/two_factor/core.py +22 -19
- portal/views/two_factor/profile.py +2 -2
- codeforlife_portal-5.33.5.dist-info/LICENSE.md +0 -577
- codeforlife_portal-5.33.5.dist-info/METADATA +0 -38
- deploy/permissions.py +0 -2
- example_project/manage.py +0 -10
- portal/autoconfig.py +0 -141
- portal/csp_config.py +0 -60
- portal/forms/add_game.py +0 -33
- portal/helpers/location.py +0 -121
- portal/static/portal/img/kurono_hero.jpg +0 -0
- portal/static/portal/img/kurono_landing_hero.png +0 -0
- portal/static/portal/img/kurono_logo.svg +0 -1
- portal/static/portal/img/kurono_logo_grey_background.svg +0 -1
- portal/static/portal/img/kurono_logo_mark.svg +0 -1
- portal/static/portal/img/kurono_resources_hero.jpg +0 -0
- portal/static/portal/img/kurono_story.png +0 -0
- portal/static/portal/img/ocado-swirl.svg +0 -22
- portal/static/portal/img/thumbnail_educate_kurono.png +0 -0
- portal/static/portal/img/thumbnail_educate_resources_and_progress_tracking.png +0 -0
- portal/static/portal/img/thumbnail_kurono_resources.png +0 -0
- portal/static/portal/img/thumbnail_play_kurono.png +0 -0
- portal/static/portal/img/x_close_video.png +0 -0
- portal/static/portal/js/aimmoGame.js +0 -106
- portal/static/portal/js/deleteWorkspaces.js +0 -14
- portal/static/portal/js/fuzzySchoolLookup.js +0 -46
- portal/static/portal/js/lib/jquery-3.5.1.min.js +0 -2
- portal/static/portal/js/lib/jquery-ui-1.12.1.min.js +0 -13
- portal/static/portal/sass/partials/_videos.scss +0 -10
- portal/static/portal/video/aimmo_play_now_background_video.mp4 +0 -0
- portal/strings/student_aimmo_dashboard.py +0 -6
- portal/templates/portal/admin/aggregated_data.html +0 -35
- portal/templates/portal/admin/map.html +0 -70
- portal/templates/portal/mouseflow.html +0 -9
- portal/templates/portal/partials/aimmo_games_table.html +0 -83
- portal/templates/portal/partials/register_over_required_age_tickbox.html +0 -9
- portal/templates/portal/play/independent_student_dashboard.html +0 -64
- portal/templates/portal/play/student_aimmo_dashboard.html +0 -63
- portal/templates/portal/privacy_policy.html +0 -483
- portal/templates/portal/reset_password_email.html +0 -9
- portal/templates/portal/teach/invite.html +0 -25
- portal/templates/portal/teach/teacher_aimmo_dashboard.html +0 -95
- portal/templates/portal/teach/teacher_resources.html +0 -68
- portal/templatetags/character_list_tags.py +0 -16
- portal/tests/pageObjects/portal/kurono_teacher_dashboard_page.py +0 -49
- portal/tests/pageObjects/portal/student_password_reset_form_page.py +0 -23
- portal/tests/pageObjects/portal/teach/onboarding_revoke_request_page.py +0 -20
- portal/tests/pageObjects/portal/teacher_password_reset_form_page.py +0 -23
- portal/tests/test_aimmo_dashboards.py +0 -172
- portal/tests/test_location.py +0 -217
- portal/tests/utils/aimmo_games.py +0 -30
- portal/views/aimmo/dashboard.py +0 -119
- portal/views/privacy_policy.py +0 -9
- portal/views/teacher/teacher_resources.py +0 -42
- {portal/views/aimmo → cfl_common}/__init__.py +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
{% load
|
|
1
|
+
{% load static %}
|
|
2
2
|
{% load app_tags %}
|
|
3
3
|
|
|
4
4
|
<div class="footer">
|
|
@@ -9,46 +9,77 @@
|
|
|
9
9
|
<div class="col-sm-4 col-xs-12">
|
|
10
10
|
<p><a href="{% url 'about' %}">About us</a></p>
|
|
11
11
|
<p><a class="freshdesk__contact-us">Help and support</a></p>
|
|
12
|
-
<p><a
|
|
12
|
+
<p><a href="https://2662351606-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M_6UDUiGoJDhr_OXetO%2Fuploads%2FHx2kJLPwUER9Ez7gdQFp%2F2023_Impact_Report_Final.pdf?alt=media"
|
|
13
|
+
target="_blank">Impact Report 2023</a></p>
|
|
14
|
+
<p><a href="https://2662351606-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M_6UDUiGoJDhr_OXetO%2Fuploads%2FzLy8JN9TSFpzunetkWET%2FImpact_Report_24.V.10.pdf?alt=media"
|
|
15
|
+
target="_blank">Impact Report 2024</a></p>
|
|
13
16
|
</div>
|
|
14
17
|
<div class="col-sm-4 col-xs-12">
|
|
15
|
-
<p><a href="{% url '
|
|
18
|
+
<p><a href="{% url 'privacy_notice' %}">Privacy notice</a></p>
|
|
16
19
|
<p><a href="{% url 'terms' %}">Terms of use</a></p>
|
|
20
|
+
<p><a class="optanon-toggle-display">Cookie settings</a></p>
|
|
21
|
+
<p><a href="https://docs.codeforlife.education/">CFL community</a></p>
|
|
17
22
|
</div>
|
|
18
23
|
<div class="col-sm-4 col-xs-12">
|
|
19
24
|
<p><a href="{% url 'home-learning' %}">Home learning</a></p>
|
|
20
25
|
<p><a href="{% url 'getinvolved' %}">Get involved</a></p>
|
|
26
|
+
<p><a href="{% url 'codingClub' %}">Coding clubs</a></p>
|
|
27
|
+
<p><a href="https://2662351606-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M_6UDUiGoJDhr_OXetO%2Fuploads%2FPavvCifcuUeZZZLkV01C%2FOpportunities%20with%20Code%20for%20Life.pdf?alt=media"
|
|
28
|
+
target="_blank">Opportunities with CFL</a></p>
|
|
21
29
|
</div>
|
|
22
30
|
</div>
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
+
</div>
|
|
32
|
+
<div class="col-sm-4 hidden-xs">
|
|
33
|
+
<a target="_blank" href="https://www.ocadogroup.com/sustainability/sustainability">
|
|
34
|
+
<img title="Ocado Group" alt="Ocado Group" src="{% static 'portal/img/logo_cfl_powered.svg' %}">
|
|
35
|
+
</a>
|
|
36
|
+
</div>
|
|
37
|
+
</div>
|
|
38
|
+
<div class="row">
|
|
39
|
+
<form id="newsletter_form" action="{% url 'process_newsletter_form' %}" method="post">
|
|
40
|
+
<div class="col-sm-8">
|
|
41
|
+
<div>
|
|
42
|
+
{{ news_form.non_field_errors }}
|
|
43
|
+
<div class="form--row">
|
|
44
|
+
<div class="form--row__input">
|
|
45
|
+
<label>{{ news_form.email.label }}</label>
|
|
46
|
+
<div class="input--icon">
|
|
47
|
+
{{ news_form.email }}
|
|
48
|
+
<span class="iconify" data-icon="mdi:email-outline"></span>
|
|
49
|
+
</div>
|
|
50
|
+
<small>{{ news_form.email.help_text }}</small>
|
|
51
|
+
{{ news_form.email.errors }}
|
|
31
52
|
</div>
|
|
32
|
-
<small>{{ news_form.email.help_text }}</small>
|
|
33
|
-
{{ news_form.email.errors }}
|
|
34
53
|
</div>
|
|
35
|
-
<
|
|
54
|
+
<div class="form--row justify-content-between">
|
|
55
|
+
<div class="form__checkbox">
|
|
56
|
+
<div class="form__checkbox-input">
|
|
57
|
+
{{ news_form.age_verification }}
|
|
58
|
+
</div>
|
|
59
|
+
<p class="p-0">Please confirm that you are over 18.</p>
|
|
60
|
+
</div>
|
|
61
|
+
<button type="submit" id="submit_newsletter" name="submit" value="Submit" class="button button--primary m-0">Sign up</button>
|
|
62
|
+
</div>
|
|
36
63
|
</div>
|
|
37
|
-
</form>
|
|
38
|
-
</div>
|
|
39
|
-
<div class="col-sm-4">
|
|
40
|
-
<img class="landscape-logo hidden-sm hidden-xs" title="Code for Life" alt="Code for Life" src="{% static 'portal/img/logo_cfl_white_landscape.png' %}">
|
|
41
|
-
<div class="external-links">
|
|
42
64
|
<div class="social-media">
|
|
43
|
-
<a target="_blank" href="https://www.facebook.com/codeforlifeuk/"><span class="iconify" data-icon="
|
|
44
|
-
<a target="_blank" href="https://
|
|
65
|
+
<a target="_blank" href="https://www.facebook.com/codeforlifeuk/"><span class="iconify" data-icon="simple-icons:facebook"></span></a>
|
|
66
|
+
<a target="_blank" href="https://www.instagram.com/codeforlife_uk/"><span class="iconify" data-icon="simple-icons:instagram"></span></a>
|
|
67
|
+
<a target="_blank" href="https://www.linkedin.com/company/code-for-life-uk/"><span class="iconify" data-icon="simple-icons:linkedin"></span></a>
|
|
68
|
+
<a target="_blank" href="https://twitter.com/codeforlifeuk"><span class="iconify" data-icon="ri:twitter-x-line"></span></a>
|
|
69
|
+
<a target="_blank" href="https://www.youtube.com/@CodeForLife-uk"><span class="iconify" data-icon="simple-icons:youtube"></span></a>
|
|
70
|
+
</div>
|
|
71
|
+
<div class="visible-xs">
|
|
72
|
+
<a target="_blank" href="https://www.ocadogroup.com/sustainability/sustainability">
|
|
73
|
+
<img title="Ocado Group" alt="Ocado Group" src="{% static 'portal/img/logo_cfl_powered.svg' %}">
|
|
74
|
+
</a>
|
|
45
75
|
</div>
|
|
46
|
-
<img class="landscape-logo visible-sm visible-xs" title="Code for Life" alt="Code for Life" src="{% static 'portal/img/logo_cfl_white_landscape.png' %}">
|
|
47
|
-
<a target="_blank" href="https://www.ocadogroup.com/our-responsible-business/corporate-responsibility/skills-for-the-future">
|
|
48
|
-
<img title="Ocado Group" alt="Ocado Group" src="{% static 'portal/img/logo_ocado_group_white.svg' %}">
|
|
49
|
-
</a>
|
|
50
76
|
</div>
|
|
51
|
-
|
|
77
|
+
<div class="col-sm-4">
|
|
78
|
+
<div class="is-flex justify-content-center justify-content-sm-end">
|
|
79
|
+
<img title="10 years anniversary" alt="10 years anniversary" src="{% static 'portal/img/10_years_anniversary.png' %}">
|
|
80
|
+
</div>
|
|
81
|
+
</div>
|
|
82
|
+
</form>
|
|
52
83
|
</div>
|
|
53
84
|
<p class="copyright">© Ocado Group {% now "Y" %}</p>
|
|
54
85
|
</div>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
{% load
|
|
1
|
+
{% load static %}
|
|
2
2
|
{% load app_tags %}
|
|
3
3
|
|
|
4
4
|
<div class="header">
|
|
@@ -15,98 +15,91 @@
|
|
|
15
15
|
{% else %}
|
|
16
16
|
<a href="{% url 'home' %}">
|
|
17
17
|
{% endif %}
|
|
18
|
-
<img class="logo" src="{% static 'portal/img/logo_cfl.png' %}">
|
|
18
|
+
<img class="logo" src="{% static 'portal/img/logo_cfl.png' %}" alt="Code for Life logo">
|
|
19
19
|
</a>
|
|
20
|
-
<a class="menu__brand--ocado" target="_blank" href="https://www.ocadogroup.com/
|
|
21
|
-
<img title="Proudly developed by Ocado Group" alt="
|
|
20
|
+
<a class="menu__brand--ocado" target="_blank" href="https://www.ocadogroup.com/sustainability/sustainability">
|
|
21
|
+
<img title="Proudly developed by Ocado Group" alt="Ocado Group logo"
|
|
22
22
|
src="{% static 'portal/img/logo_ocado_group.svg' %}">
|
|
23
23
|
</a>
|
|
24
24
|
<span class="material-icons-outlined visible-sm visible-xs" data-toggle="collapse" data-target="#menu-items">
|
|
25
25
|
menu
|
|
26
26
|
</span>
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
class="
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
<a href="{% url_for_aimmo_dashboard %}" id="teacher_kurono_dashboard_button"><small>Kurono</small></a>
|
|
27
|
+
<div class="menu__left-side hidden-sm hidden-xs">
|
|
28
|
+
{% if user|is_logged_in %}
|
|
29
|
+
{% if user|is_logged_in_as_teacher %}
|
|
30
|
+
{% if user|has_teacher_finished_onboarding %}
|
|
31
|
+
<a href="{% url 'dashboard' %}" class="button--menu button--menu--secondary button--menu--enabled">Dashboard</a>
|
|
32
|
+
<div class="dropdown">
|
|
33
|
+
<a id="games_button"
|
|
34
|
+
class="button--menu button--menu--secondary button--menu--enabled">
|
|
35
|
+
Games <span class="material-icons-outlined md-32">arrow_drop_down</span></a>
|
|
36
|
+
<div class="dropdown-content">
|
|
37
|
+
<a href="{% url 'levels' %}"><small>Rapid Router</small></a>
|
|
38
|
+
<a href="{% url 'python_levels' %}"><small>Python Den</small></a>
|
|
39
|
+
</div>
|
|
41
40
|
</div>
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
<
|
|
50
|
-
|
|
51
|
-
<small>
|
|
41
|
+
<div class="dropdown">
|
|
42
|
+
<a id="teaching_resources_button"
|
|
43
|
+
class="button--menu button--menu--secondary button--menu--enabled">
|
|
44
|
+
Resources <span class="material-icons-outlined md-32">arrow_drop_down</span></a>
|
|
45
|
+
<div class="dropdown-content">
|
|
46
|
+
<a id="rapid_router_resources_button" href="https://code-for-life.gitbook.io/teaching-resources/" target="_blank">
|
|
47
|
+
<small>Rapid Router</small> <span class="iconify" data-icon="mdi:open-in-new"></span></a>
|
|
48
|
+
<a href="https://code-for-life.gitbook.io/python-lessons-with-raspberry-pi-ide/DGiFT28ihVJK7ghZQHqu" target="_blank">
|
|
49
|
+
<small>Python Den</small> <span class="iconify" data-icon="mdi:open-in-new"></span></a>
|
|
50
|
+
<a href="{% url 'codingClub' %}"><small>Coding Clubs</small></a>
|
|
51
|
+
</div>
|
|
52
52
|
</div>
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
{% endif %}
|
|
59
|
-
{% else %}
|
|
60
|
-
{% if user|is_independent_student %}
|
|
61
|
-
<div class="menu--title">Independent</div>
|
|
53
|
+
{% else %}
|
|
54
|
+
<a href="{% url 'onboarding-organisation' %}" class="button--menu button--menu--secondary button--menu--enabled">Dashboard</a>
|
|
55
|
+
<a class="button--menu button--menu--secondary button--menu--disabled">Games</a>
|
|
56
|
+
<a class="button--menu button--menu--secondary button--menu--disabled">Resources</a>
|
|
57
|
+
{% endif %}
|
|
62
58
|
{% else %}
|
|
63
|
-
<
|
|
64
|
-
|
|
65
|
-
<a
|
|
66
|
-
{% if user|is_independent_student %}
|
|
59
|
+
<a
|
|
60
|
+
{% if user|is_independent_student %}
|
|
67
61
|
href="{% url 'independent_student_details' %}"
|
|
68
|
-
|
|
62
|
+
{% else %}
|
|
69
63
|
href="{% url 'student_details' %}"
|
|
70
|
-
{% endif %}
|
|
71
|
-
id="student_dashboard_button"
|
|
72
|
-
class="button--menu button--menu--secondary button--menu--enabled">Dashboard</a>
|
|
73
|
-
<div class="dropdown">
|
|
74
|
-
<a class="button--menu button--menu--secondary button--menu--enabled">
|
|
75
|
-
Games
|
|
76
|
-
<span class="material-icons-outlined md-32">arrow_drop_down</span>
|
|
77
|
-
</a>
|
|
78
|
-
<div class="dropdown-content">
|
|
79
|
-
<a href="{% url 'levels' %}"><small>Rapid Router</small></a>
|
|
80
|
-
{% if not user|is_independent_student %}
|
|
81
|
-
<a href="{% url_for_aimmo_dashboard %}"><small>Kurono</small></a>
|
|
82
64
|
{% endif %}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
{% if user|is_logged_in_as_school_user %}
|
|
86
|
-
<a href="{% url 'scoreboard' %}" id="student_scoreboards_button"
|
|
87
|
-
class="button--menu button--menu--secondary button--menu--enabled">Scoreboard</a>
|
|
88
|
-
{% endif %}
|
|
89
|
-
<!-- independent student -->
|
|
90
|
-
{% if not user.new_student.class_field %}
|
|
65
|
+
id="student_dashboard_button"
|
|
66
|
+
class="button--menu button--menu--secondary button--menu--enabled">Dashboard</a>
|
|
91
67
|
<div class="dropdown">
|
|
92
|
-
<a
|
|
93
|
-
|
|
94
|
-
|
|
68
|
+
<a class="button--menu button--menu--secondary button--menu--enabled">
|
|
69
|
+
Games
|
|
70
|
+
<span class="material-icons-outlined md-32">arrow_drop_down</span>
|
|
71
|
+
</a>
|
|
95
72
|
<div class="dropdown-content">
|
|
96
|
-
<a href="
|
|
97
|
-
|
|
73
|
+
<a href="{% url 'levels' %}"><small>Rapid Router</small></a>
|
|
74
|
+
<a href="{% url 'python_levels' %}"><small>Python Den</small></a>
|
|
98
75
|
</div>
|
|
99
76
|
</div>
|
|
77
|
+
{% if user|is_logged_in_as_school_user %}
|
|
78
|
+
<a href="{% url 'scoreboard' %}" id="student_scoreboards_button"
|
|
79
|
+
class="button--menu button--menu--secondary button--menu--enabled">Scoreboard</a>
|
|
80
|
+
{% endif %}
|
|
81
|
+
<!-- independent student -->
|
|
82
|
+
{% if not user.new_student.class_field %}
|
|
83
|
+
<div class="dropdown">
|
|
84
|
+
<a id="teaching_resources_button"
|
|
85
|
+
class="button--menu button--menu--secondary button--menu--enabled">
|
|
86
|
+
Resources <span class="material-icons-outlined md-32">arrow_drop_down</span></a>
|
|
87
|
+
<div class="dropdown-content">
|
|
88
|
+
<a href="https://code-for-life.gitbook.io/independent-student-resources/" target="_blank">
|
|
89
|
+
<small>Rapid Router</small><span class="iconify" data-icon="mdi:open-in-new"></span></a>
|
|
90
|
+
<a href="{% url 'codingClub' %}"><small>Coding Clubs</small></a>
|
|
91
|
+
</div>
|
|
92
|
+
</div>
|
|
93
|
+
{% endif %}
|
|
100
94
|
{% endif %}
|
|
101
|
-
{%
|
|
102
|
-
{% else %}
|
|
103
|
-
<div class="menu__left-side col-md-5">
|
|
95
|
+
{% else %}
|
|
104
96
|
<a href="{% url 'teach' %}" class="button--menu button--menu--primary button--menu--enabled">Teachers</a>
|
|
105
97
|
<a href="{% url 'play' %}" class="button--menu button--menu--primary button--menu--enabled">Students</a>
|
|
106
|
-
|
|
98
|
+
{% endif %}
|
|
99
|
+
</div>
|
|
107
100
|
</div>
|
|
108
101
|
{% if user|is_logged_in %}
|
|
109
|
-
<div class="menu__right-side
|
|
102
|
+
<div class="menu__right-side">
|
|
110
103
|
<div class="dropdown header__account-details-dropdown">
|
|
111
104
|
<button id="logout_menu" class="button--regular button--secondary button--dropdown header__account-details-dropdown"
|
|
112
105
|
data-toggle="dropdown">
|
|
@@ -114,8 +107,7 @@
|
|
|
114
107
|
</button>
|
|
115
108
|
<ul class="dropdown-menu header__account-details-dropdown-menu">
|
|
116
109
|
<li class="dropdown-menu__option">
|
|
117
|
-
<a class="button--regular" id="logout_button" aria-labelledby="Log out"
|
|
118
|
-
href="{% url 'logout_view' %}" onclick="deleteAllLocalStorageWorkspaces();">
|
|
110
|
+
<a class="button--regular" id="logout_button" aria-labelledby="Log out" href="{% url 'logout_view' %}">
|
|
119
111
|
<div class="dropdown-menu__option__text">Log out</div>
|
|
120
112
|
<span class="material-icons-outlined">logout</span></a>
|
|
121
113
|
</li>
|
|
@@ -123,8 +115,8 @@
|
|
|
123
115
|
{% if user|has_teacher_finished_onboarding %}
|
|
124
116
|
<li class="dropdown-menu__option">
|
|
125
117
|
{# if the current page is teacher dashboard, trigger a tab change instead #}
|
|
126
|
-
<a class="button--regular" aria-labelledby="Update account details"
|
|
127
|
-
href="{% url 'dashboard' %}#account" {% if request.resolver_match.view_name == 'dashboard' %}onclick="$('#tab-account').click();"{% endif %}>
|
|
118
|
+
<a class="button--regular" aria-labelledby="Update account details" id="update_account_detail_button"
|
|
119
|
+
href="{% url 'dashboard' %}?account=true#account" {% if request.resolver_match.view_name == 'dashboard' %}onclick="$('#tab-account').click();"{% endif %}>
|
|
128
120
|
<div class="dropdown-menu__option__text">Update account details</div>
|
|
129
121
|
<span class="material-icons-outlined">manage_accounts</span></a>
|
|
130
122
|
</li>
|
|
@@ -146,36 +138,36 @@
|
|
|
146
138
|
{% endif %}
|
|
147
139
|
</ul>
|
|
148
140
|
</div>
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
141
|
+
{% else %}
|
|
142
|
+
<div class="menu__right-side">
|
|
143
|
+
<a href="{% url 'register' %}" id="signup_button" class="button button--primary button--register register">Register for FREE</a>
|
|
144
|
+
<div class="dropdown">
|
|
145
|
+
<button id="login_dropdown" class="button--regular button--secondary button--header--login button--dropdown"
|
|
146
|
+
data-toggle="dropdown">
|
|
147
|
+
<div class="dropdown__text">Log in</div>
|
|
148
|
+
</button>
|
|
149
|
+
<ul class="dropdown-menu header__login-options-dropdown-menu">
|
|
150
|
+
<li class="dropdown-menu__option">
|
|
151
|
+
<a id="teacher_login_button" class="button--regular" aria-labelledby="Teacher" href="{% url 'teacher_login' %}">
|
|
152
|
+
<div class="dropdown-menu__option__text">Teacher</div>
|
|
153
|
+
<span data-nosnippet class="material-icons-outlined">chevron_right</span>
|
|
154
|
+
</a>
|
|
155
|
+
</li>
|
|
156
|
+
<li class="dropdown-menu__option">
|
|
157
|
+
<a id="student_login_button" class="button--regular" aria-labelledby="Student" href="{% url 'student_login_access_code' %}">
|
|
158
|
+
<div class="dropdown-menu__option__text">Student</div>
|
|
159
|
+
<span data-nosnippet class="material-icons-outlined">chevron_right</span>
|
|
160
|
+
</a>
|
|
161
|
+
</li>
|
|
162
|
+
<li class="dropdown-menu__option">
|
|
163
|
+
<a id="independent_login_button" class="button--regular" aria-labelledby="Independent" href="{% url 'independent_student_login' %}">
|
|
164
|
+
<div class="dropdown-menu__option__text">Independent</div>
|
|
165
|
+
<span data-nosnippet class="material-icons-outlined">chevron_right</span>
|
|
166
|
+
</a>
|
|
167
|
+
</li>
|
|
168
|
+
</ul>
|
|
169
|
+
</div>
|
|
170
|
+
{% endif %}
|
|
179
171
|
</div>
|
|
180
172
|
</div>
|
|
181
173
|
<div id="menu-items" class="collapse">
|
|
@@ -191,13 +183,15 @@
|
|
|
191
183
|
href="{% url 'dashboard' %}">School / Club<span class="material-icons-outlined md-32">chevron_right</span></a>
|
|
192
184
|
<a class="button button--menu__item button--menu__item__sub"
|
|
193
185
|
href="{% url 'levels' %}">Rapid Router<span class="material-icons-outlined md-32">chevron_right</span></a>
|
|
186
|
+
<a class="button button--menu__item button--menu__item__sub"
|
|
187
|
+
href="{% url 'python_levels' %}">Python Den<span class="material-icons-outlined md-32">chevron_right</span></a>
|
|
194
188
|
<button class="button--menu__item button--menu__item__sub
|
|
195
189
|
button--menu__item--sub-header" data-toggle="collapse" data-target="#resources-tabs">Teaching Resources</button>
|
|
196
190
|
<div id="resources-tabs" class="collapse">
|
|
197
191
|
<a class="button button--menu__item button--menu__item__sub__sub"
|
|
198
|
-
href="
|
|
192
|
+
href="https://code-for-life.gitbook.io/teaching-resources/" target="_blank">Rapid Router<span class="material-icons-outlined md-32">chevron_right</span></a>
|
|
199
193
|
<a class="button button--menu__item button--menu__item__sub__sub"
|
|
200
|
-
|
|
194
|
+
href="https://code-for-life.gitbook.io/python-lessons-with-raspberry-pi-ide/DGiFT28ihVJK7ghZQHqu" target="_blank">Python Den<span class="material-icons-outlined md-32">chevron_right</span></a>
|
|
201
195
|
</div>
|
|
202
196
|
</div>
|
|
203
197
|
{% else %}
|
|
@@ -216,10 +210,8 @@
|
|
|
216
210
|
<div id="games-tabs" class="collapse">
|
|
217
211
|
<a class="button button--menu__item button--menu__item--{% if user|is_independent_student %}independent{% else %}student{% endif %} button--menu__item__sub"
|
|
218
212
|
href="{% url 'levels' %}">Rapid Router<span class="material-icons-outlined md-32">chevron_right</span></a>
|
|
219
|
-
{% if
|
|
220
|
-
|
|
221
|
-
href="{% url_for_aimmo_dashboard %}">Kurono<span class="material-icons-outlined md-32">chevron_right</span></a>
|
|
222
|
-
{% endif %}
|
|
213
|
+
<a class="button button--menu__item button--menu__item--{% if user|is_independent_student %}independent{% else %}student{% endif %} button--menu__item__sub"
|
|
214
|
+
href="{% url 'python_levels' %}">Python Den<span class="material-icons-outlined md-32">chevron_right</span></a>
|
|
223
215
|
</div>
|
|
224
216
|
{% if user|is_logged_in_as_school_user %}
|
|
225
217
|
<a class="button button--menu__item button--menu__item--student"
|
|
@@ -239,16 +231,16 @@
|
|
|
239
231
|
{% endif %}
|
|
240
232
|
{% else %}
|
|
241
233
|
<a class="button button--menu__item button--register"
|
|
242
|
-
href="{% url 'register' %}">Register now</a>
|
|
234
|
+
href="{% url 'register' %}">Register now for FREE</a>
|
|
243
235
|
<button class="button--menu__item button--menu__item--sub-header login"
|
|
244
236
|
data-toggle="collapse" data-target="#login-tabs">Log in</button>
|
|
245
237
|
<div id="login-tabs" class="collapse">
|
|
246
238
|
<a class="button button--menu__item button--menu__item__sub"
|
|
247
|
-
href="{% url 'teacher_login' %}">Teacher<span class="material-icons-outlined md-32">chevron_right</span></a>
|
|
239
|
+
href="{% url 'teacher_login' %}">Teacher<span data-nosnippet class="material-icons-outlined md-32">chevron_right</span></a>
|
|
248
240
|
<a class="button button--menu__item button--menu__item__sub"
|
|
249
|
-
href="{% url 'student_login_access_code' %}">Student<span class="material-icons-outlined md-32">chevron_right</span></a>
|
|
241
|
+
href="{% url 'student_login_access_code' %}">Student<span data-nosnippet class="material-icons-outlined md-32">chevron_right</span></a>
|
|
250
242
|
<a class="button button--menu__item button--menu__item__sub"
|
|
251
|
-
href="{% url 'independent_student_login' %}">Independent<span class="material-icons-outlined md-32">chevron_right</span></a>
|
|
243
|
+
href="{% url 'independent_student_login' %}">Independent<span data-nosnippet class="material-icons-outlined md-32">chevron_right</span></a>
|
|
252
244
|
</div>
|
|
253
245
|
<a class="button button--menu__item" href="{% url 'teach' %}">Teacher
|
|
254
246
|
<span class="material-icons-outlined md-32">chevron_right</span></a>
|
|
@@ -259,9 +251,15 @@
|
|
|
259
251
|
<span class="material-icons-outlined md-32">chevron_right</span></a>
|
|
260
252
|
<a class="button button--menu__item freshdesk__contact-us">Help and support
|
|
261
253
|
<span class="material-icons-outlined md-32">chevron_right</span></a>
|
|
254
|
+
<a class="button button--menu__item" target="_blank"
|
|
255
|
+
href="https://2662351606-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M_6UDUiGoJDhr_OXetO%2Fuploads%2FHx2kJLPwUER9Ez7gdQFp%2F2023_Impact_Report_Final.pdf?alt=media">
|
|
256
|
+
Impact Report 2023<span class="material-icons-outlined md-32">chevron_right</span></a>
|
|
257
|
+
<a class="button button--menu__item" target="_blank"
|
|
258
|
+
href="https://2662351606-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M_6UDUiGoJDhr_OXetO%2Fuploads%2FzLy8JN9TSFpzunetkWET%2FImpact_Report_24.V.10.pdf?alt=media">
|
|
259
|
+
Impact Report 2024<span class="material-icons-outlined md-32">chevron_right</span></a>
|
|
262
260
|
<a class="button button--menu__item optanon-toggle-display">Cookie settings
|
|
263
261
|
<span class="material-icons-outlined md-32">chevron_right</span></a>
|
|
264
|
-
<a class="button button--menu__item" href="{% url '
|
|
262
|
+
<a class="button button--menu__item" href="{% url 'privacy_notice' %}">Privacy notice
|
|
265
263
|
<span class="material-icons-outlined md-32">chevron_right</span></a>
|
|
266
264
|
<a class="button button--menu__item" href="{% url 'terms' %}">Terms of use
|
|
267
265
|
<span class="material-icons-outlined md-32">chevron_right</span></a>
|
|
@@ -269,6 +267,9 @@
|
|
|
269
267
|
<span class="material-icons-outlined md-32">chevron_right</span></a>
|
|
270
268
|
<a class="button button--menu__item" href="{% url 'getinvolved' %}">Get involved
|
|
271
269
|
<span class="material-icons-outlined md-32">chevron_right</span></a>
|
|
270
|
+
<a class="button button--menu__item" target="_blank"
|
|
271
|
+
href="https://2662351606-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M_6UDUiGoJDhr_OXetO%2Fuploads%2FPavvCifcuUeZZZLkV01C%2FOpportunities%20with%20Code%20for%20Life.pdf?alt=media">Opportunities with CFL
|
|
272
|
+
<span class="material-icons-outlined md-32">chevron_right</span></a>
|
|
272
273
|
{% if user|is_logged_in %}
|
|
273
274
|
{% if user|is_logged_in_as_teacher %}
|
|
274
275
|
{% if user|has_teacher_finished_onboarding %}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
{% load
|
|
1
|
+
{% load static %}
|
|
2
2
|
{% load app_tags %}
|
|
3
3
|
|
|
4
|
-
<div class="card">
|
|
4
|
+
<div class="card activated-card">
|
|
5
|
+
<div class="activated-text">Activated</div>
|
|
5
6
|
<img class="card__image" src="{{ image | cloud_storage }}">
|
|
6
7
|
<div class="card__text">
|
|
7
8
|
<h4 class="card__title">{{ title }}</h4>
|
|
8
9
|
<p>{{ description }}</p>
|
|
9
10
|
<div class="button-group button-group__icon">
|
|
10
|
-
<a target="_blank" href="{{ button1.url }}" class="button button--
|
|
11
|
+
<a target="_blank" href="{{ button1.url }}" class="button button--secondary button--secondary--dark button--icon">
|
|
11
12
|
{{ button1.text }}<span class="iconify" data-icon="mdi:open-in-new"></span>
|
|
12
13
|
</a>
|
|
13
14
|
<a href="{% url button2.url id=button2.url_args %}" class="button button--primary button-right-arrow">
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
{% load
|
|
1
|
+
{% load static %}
|
|
2
2
|
{# An info popup with a close button in the top-right corner. #}
|
|
3
3
|
<section id="info-popup" class="popup-wrapper">
|
|
4
4
|
<div class="popup-box">
|
|
5
5
|
<div class="popup-box__title justify-content-end">
|
|
6
|
-
<button type="button" onclick="hideInfoPopup()" class="close
|
|
6
|
+
<button type="button" onclick="hideInfoPopup()" class="close popup-box__close" aria-label="Close">
|
|
7
7
|
<span class="iconify" data-icon="mdi:close"></span>
|
|
8
8
|
</button>
|
|
9
9
|
</div>
|
|
10
|
-
<div class="popup-box__title
|
|
10
|
+
<div class="popup-box__title"><h5 class="mt-1"></h5></div>
|
|
11
11
|
<div class="popup-box__msg"></div>
|
|
12
12
|
</div>
|
|
13
13
|
</section>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{# A popup for inviting teacher as admin #}
|
|
2
|
+
<section id="popup-make-admin-teacher" class="popup-wrapper">
|
|
3
|
+
<div class="popup-box">
|
|
4
|
+
<div>
|
|
5
|
+
<button class="close popup-box__close" type="button" id="close_popup_button" onclick="hideMakeAdminTeacherPopup()" aria-label="Close">
|
|
6
|
+
<span class="iconify" data-icon="mdi:close"></span>
|
|
7
|
+
</button>
|
|
8
|
+
</div>
|
|
9
|
+
<div class="popup-box__title">Assigning admin permissions</div>
|
|
10
|
+
<div class="popup-box__msg mt-4">
|
|
11
|
+
<p>You are about to add admin permissions to another teacher's account.
|
|
12
|
+
Teachers with admin permissions will have the same permissions as you.
|
|
13
|
+
</p>
|
|
14
|
+
<p class="my-4"><strong>Do you wish to proceed?</strong></p>
|
|
15
|
+
<p><strong class="text-danger">Accepting means you understand class data will be shared.</strong></p>
|
|
16
|
+
</div>
|
|
17
|
+
<div class="popup-box__buttons justify-content-center">
|
|
18
|
+
<a id="cancel_admin_popup_button" class="button button--primary" onclick="hideMakeAdminTeacherPopup()" aria-labelledby="cancel_admin_popup_button">Cancel</a>
|
|
19
|
+
<a id="add_admin_button" class="button button--primary button--primary--danger button--icon" onclick="" aria-labelledby="add_admin_button">
|
|
20
|
+
Add as admin <span class="iconify" data-icon="mdi:add"></span></a>
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
</section>
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
{% load
|
|
1
|
+
{% load static %}
|
|
2
2
|
{# A confirmation popup with Cancel and Confirm buttons. #}
|
|
3
3
|
<section id="popup" class="popup-wrapper">
|
|
4
4
|
<div class="popup-box">
|
|
5
|
-
<div
|
|
5
|
+
<div>
|
|
6
|
+
<button type="button" onclick="hidePopupConfirmation()" class="close popup-box__close" aria-label="Close">
|
|
7
|
+
<span class="iconify" data-icon="mdi:close"></span>
|
|
8
|
+
</button>
|
|
9
|
+
</div>
|
|
10
|
+
<div class="popup-box__title"></div>
|
|
6
11
|
<div class="popup-box__msg"></div>
|
|
7
12
|
<div class="popup-box__buttons">
|
|
8
13
|
<a id="cancel_button" class="button button--small button--secondary button--secondary--dark" onclick="hidePopupConfirmation()" aria-labelledby="cancel_button"> Cancel </a>
|
|
@@ -2,8 +2,5 @@
|
|
|
2
2
|
<div class="form__checkbox-input">
|
|
3
3
|
{{ newsletter_ticked }}
|
|
4
4
|
</div>
|
|
5
|
-
<p class="semi-bold">
|
|
6
|
-
|
|
7
|
-
<a href="{% url 'terms' %}">privacy policy</a> for more information.
|
|
8
|
-
</p>
|
|
9
|
-
</div>
|
|
5
|
+
<p class="semi-bold">Sign up to receive updates about Code for Life games and teaching resources.</p>
|
|
6
|
+
</div>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{% load static %}
|
|
2
|
+
{# A screen-time warning popup with a Continue button. #}
|
|
3
|
+
<section id="screentime-popup" class="popup-wrapper text-center">
|
|
4
|
+
<div class="popup-box">
|
|
5
|
+
<div class="popup-box__title flex-column justify-content-center">
|
|
6
|
+
<div><img width="100" src="{% static 'common/img/brain.svg' %}"/></div>
|
|
7
|
+
<div class="my-4">Time for a break?</div>
|
|
8
|
+
</div>
|
|
9
|
+
<div class="popup-box__msg">You have been using the Code for Life website for a while. Remember to take regular screen breaks to recharge those brain cells!</div>
|
|
10
|
+
<div class="popup-box__buttons mt-0">
|
|
11
|
+
<a id="screentime_continue_button" class='button button--primary' onclick="hideScreentimePopup()" aria-labelledby="screentime_continue_button"> Continue </a>
|
|
12
|
+
</div>
|
|
13
|
+
</div>
|
|
14
|
+
</section>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{% load static %}
|
|
2
|
+
{# A screen-time warning popup with a Continue button. #}
|
|
3
|
+
<section id="service-unavailable-popup" class="popup-wrapper">
|
|
4
|
+
<div class="popup-box">
|
|
5
|
+
<div class="popup-box__title flex-column justify-content-center">
|
|
6
|
+
<div class="popup-box__title">
|
|
7
|
+
<h5 class="mt-1"></h5>
|
|
8
|
+
</div>
|
|
9
|
+
<div class="popup-box__msg"></div>
|
|
10
|
+
<div class="popup-box__buttons mt-0">
|
|
11
|
+
<a id="screentime_continue_button"
|
|
12
|
+
class='button button--primary'
|
|
13
|
+
onclick="hideServiceUnavailable()"
|
|
14
|
+
aria-labelledby="screentime_continue_button">Confirm</a>
|
|
15
|
+
</div>
|
|
16
|
+
</div>
|
|
17
|
+
</section>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{% load static %}
|
|
2
|
+
{# A session expiry warning popup with a "Wait, I'm still here!" button. #}
|
|
3
|
+
<section id="session-popup" class="popup-wrapper text-center">
|
|
4
|
+
<div class="popup-box">
|
|
5
|
+
<div class="popup-box__title d-flex justify-content-center">
|
|
6
|
+
<h4>Where did you go? 👀</h4>
|
|
7
|
+
</div>
|
|
8
|
+
<p class="popup-box__msg">We noticed that you have been inactive for a while. Are you still there? For your
|
|
9
|
+
online safety we will log you out in:</p>
|
|
10
|
+
<div class="d-flex justify-content-center">
|
|
11
|
+
<h4><span id="minutes">2</span> min <span id="seconds">00</span> secs</h4>
|
|
12
|
+
</div>
|
|
13
|
+
<p class="popup-box__msg">You may lose progress unless you continue or save.</p>
|
|
14
|
+
<div class="popup-box__buttons mt-0">
|
|
15
|
+
<a id="session_continue_button" class="button button--primary" onclick="hideSessionPopup()"
|
|
16
|
+
aria-labelledby="session_continue_button">Wait, I'm still here!</a>
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
</section>
|