codeforlife-portal 7.3.7__tar.gz → 7.4.0__tar.gz

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.

Potentially problematic release.


This version of codeforlife-portal might be problematic. Click here for more details.

Files changed (559) hide show
  1. {codeforlife-portal-7.3.7/codeforlife_portal.egg-info → codeforlife-portal-7.4.0}/PKG-INFO +1 -1
  2. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0/codeforlife_portal.egg-info}/PKG-INFO +1 -1
  3. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/codeforlife_portal.egg-info/SOURCES.txt +2 -1
  4. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/codeforlife_portal.egg-info/requires.txt +1 -1
  5. codeforlife-portal-7.4.0/portal/__init__.py +1 -0
  6. codeforlife-portal-7.4.0/portal/context_processors.py +9 -0
  7. codeforlife-portal-7.4.0/portal/forms/dotmailer.py +55 -0
  8. codeforlife-portal-7.4.0/portal/static/portal/img/rr_advanced.png +0 -0
  9. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/js/common.js +35 -5
  10. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/modules/_colours.scss +3 -0
  11. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/modules/_levels.scss +1 -1
  12. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/modules/_mixins.scss +5 -0
  13. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/partials/_buttons.scss +31 -3
  14. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/partials/_header.scss +7 -6
  15. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/partials/_popup.scss +7 -2
  16. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/base.html +12 -3
  17. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/home_learning.html +8 -7
  18. codeforlife-portal-7.4.0/portal/templates/portal/partials/donate_popup.html +46 -0
  19. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/partials/header.html +34 -30
  20. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/test_emails.py +17 -22
  21. codeforlife-portal-7.3.7/portal/tests/test_newsletter_footer.py → codeforlife-portal-7.4.0/portal/tests/test_global_forms.py +17 -1
  22. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/urls.py +2 -0
  23. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/views/dotmailer.py +30 -2
  24. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/views/teacher/dashboard.py +174 -57
  25. codeforlife-portal-7.3.7/portal/__init__.py +0 -1
  26. codeforlife-portal-7.3.7/portal/context_processors.py +0 -5
  27. codeforlife-portal-7.3.7/portal/forms/dotmailer.py +0 -20
  28. codeforlife-portal-7.3.7/portal/static/portal/img/rr_advanced.png +0 -0
  29. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/LICENSE.md +0 -0
  30. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/MANIFEST.in +0 -0
  31. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/README.md +0 -0
  32. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/codeforlife_portal.egg-info/dependency_links.txt +0 -0
  33. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/codeforlife_portal.egg-info/not-zip-safe +0 -0
  34. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/codeforlife_portal.egg-info/top_level.txt +0 -0
  35. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/deploy/__init__.py +0 -0
  36. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/deploy/captcha.py +0 -0
  37. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/deploy/middleware/__init__.py +0 -0
  38. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/deploy/middleware/admin_access.py +0 -0
  39. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/deploy/middleware/basicauth.py +0 -0
  40. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/deploy/middleware/exceptionlogging.py +0 -0
  41. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/deploy/middleware/screentime_warning.py +0 -0
  42. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/deploy/middleware/security.py +0 -0
  43. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/deploy/middleware/session_timeout.py +0 -0
  44. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/deploy/static/apple-touch-icon-120x120.png +0 -0
  45. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/deploy/static/apple-touch-icon-152x152.png +0 -0
  46. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/deploy/static/apple-touch-icon-180x180.png +0 -0
  47. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/deploy/static/apple-touch-icon-76x76.png +0 -0
  48. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/deploy/static/apple-touch-icon.png +0 -0
  49. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/deploy/static/robots.txt +0 -0
  50. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/deploy/templates/deploy/csrf_failure.html +0 -0
  51. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/deploy/views.py +0 -0
  52. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/admin.py +0 -0
  53. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/app_settings.py +0 -0
  54. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/backends.py +0 -0
  55. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/beta.py +0 -0
  56. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/forms/__init__.py +0 -0
  57. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/forms/admin.py +0 -0
  58. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/forms/error_messages.py +0 -0
  59. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/forms/invite_teacher.py +0 -0
  60. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/forms/organisation.py +0 -0
  61. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/forms/play.py +0 -0
  62. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/forms/registration.py +0 -0
  63. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/forms/teach.py +0 -0
  64. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/handlers.py +0 -0
  65. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/helpers/__init__.py +0 -0
  66. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/helpers/captcha.py +0 -0
  67. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/helpers/decorators.py +0 -0
  68. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/helpers/password.py +0 -0
  69. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/helpers/ratelimit.py +0 -0
  70. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/helpers/regexes.py +0 -0
  71. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/helpers/request_handlers.py +0 -0
  72. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/migrations/0001_squashed_0041_new_news.py +0 -0
  73. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/migrations/0042_school_country.py +0 -0
  74. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/migrations/0043_auto_20150430_0952.py +0 -0
  75. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/migrations/0044_auto_20150430_0959.py +0 -0
  76. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/migrations/0045_auto_20150430_1446.py +0 -0
  77. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/migrations/0046_auto_20150723_1101.py +0 -0
  78. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/migrations/0047_remove_userprofile_avatar.py +0 -0
  79. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/migrations/0048_plural_management_frontnews.py +0 -0
  80. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/migrations/0049_refactor_emailverifications.py +0 -0
  81. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/migrations/0050_refactor_emailverifications_2.py +0 -0
  82. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/migrations/0051_add_missing_ev_records.py +0 -0
  83. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/migrations/0052_refactor_emailverifications_3.py +0 -0
  84. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/migrations/0053_refactor_teacher_student_1.py +0 -0
  85. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/migrations/0054_pending_join_request_can_be_blank.py +0 -0
  86. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/migrations/0055_add_preview_user.py +0 -0
  87. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/migrations/0056_remove_preview_user.py +0 -0
  88. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/migrations/0057_delete_frontpagenews.py +0 -0
  89. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/migrations/0058_move_to_common_models.py +0 -0
  90. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/migrations/0059_move_email_verifications_to_common.py +0 -0
  91. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/migrations/0060_delete_guardian.py +0 -0
  92. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/migrations/0061_make_portaladmin_teacher.py +0 -0
  93. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/migrations/0062_verify_portaladmin.py +0 -0
  94. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/migrations/__init__.py +0 -0
  95. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/mixins/__init__.py +0 -0
  96. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/mixins/cron_mixin.py +0 -0
  97. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/models.py +0 -0
  98. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/permissions/__init__.py +0 -0
  99. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/permissions/is_cron_request_from_google.py +0 -0
  100. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/pipeline_compilers/__init__.py +0 -0
  101. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/pipeline_compilers/libsass_compiler.py +0 -0
  102. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/fonts/bootstrap/glyphicons-halflings-regular.eot +0 -0
  103. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/fonts/bootstrap/glyphicons-halflings-regular.svg +0 -0
  104. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/fonts/bootstrap/glyphicons-halflings-regular.ttf +0 -0
  105. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/fonts/bootstrap/glyphicons-halflings-regular.woff +0 -0
  106. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/fonts/bootstrap/glyphicons-halflings-regular.woff2 +0 -0
  107. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/10_years_anniversary.png +0 -0
  108. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/10x_logo.png +0 -0
  109. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/RR_logo_grass_background.png +0 -0
  110. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/RR_logo_green.svg +0 -0
  111. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/RR_logo_simple.png +0 -0
  112. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/about_us_cfl.jpg +0 -0
  113. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/about_us_hero.jpg +0 -0
  114. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/about_us_ocado.jpg +0 -0
  115. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/barefoot_logo.png +0 -0
  116. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/bcs_logo.png +0 -0
  117. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/clubs.png +0 -0
  118. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/coding_club_hero.jpg +0 -0
  119. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/coding_club_python_pack.png +0 -0
  120. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/colorboxImages/border.png +0 -0
  121. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/colorboxImages/controls.png +0 -0
  122. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/colorboxImages/loading.gif +0 -0
  123. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/colorboxImages/loading_background.png +0 -0
  124. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/colorboxImages/overlay.png +0 -0
  125. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/confirmation_tick.png +0 -0
  126. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/cross.png +0 -0
  127. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/dee.png +0 -0
  128. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/facebook.png +0 -0
  129. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/favicon.ico +0 -0
  130. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/get_involved_hero.png +0 -0
  131. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/gitbook.png +0 -0
  132. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/gitbook_space.png +0 -0
  133. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/github.png +0 -0
  134. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/github_hero.png +0 -0
  135. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/gla_logo.png +0 -0
  136. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/hamburger.png +0 -0
  137. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/help_and_support_hero.jpg +0 -0
  138. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/home_educate.png +0 -0
  139. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/home_educate_hero.jpg +0 -0
  140. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/home_learning_hero.jpg +0 -0
  141. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/home_play.png +0 -0
  142. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/home_play_hero.jpg +0 -0
  143. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/hope_logo.png +0 -0
  144. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/howe_dell_1.png +0 -0
  145. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/howe_dell_2.png +0 -0
  146. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/howe_dell_3.png +0 -0
  147. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/icl_logo.png +0 -0
  148. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/icon_controller.png +0 -0
  149. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/icon_free.png +0 -0
  150. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/icon_globe.png +0 -0
  151. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/icon_piechart.png +0 -0
  152. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/icon_step_by_step.png +0 -0
  153. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/icon_tracking.png +0 -0
  154. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/icon_uk_flag.png +0 -0
  155. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/kirsty.png +0 -0
  156. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/logo_cfl.png +0 -0
  157. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/logo_cfl_powered.svg +0 -0
  158. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/logo_cfl_reminder_cards.jpg +0 -0
  159. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/logo_cfl_white_landscape.png +0 -0
  160. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/logo_ocado.png +0 -0
  161. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/logo_ocado_group.png +0 -0
  162. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/logo_ocado_group.svg +0 -0
  163. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/logo_ocado_group_white.svg +0 -0
  164. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/logo_python_den.svg +0 -0
  165. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/long_europe_map.png +0 -0
  166. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/mc_saatchi_logo.png +0 -0
  167. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/nigel.png +0 -0
  168. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/ocado-swirl.svg +0 -0
  169. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/oval_blue.svg +0 -0
  170. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/oval_pink.svg +0 -0
  171. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/oval_yellow.svg +0 -0
  172. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/paper_plane.png +0 -0
  173. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/phil.png +0 -0
  174. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/polygon_blue.svg +0 -0
  175. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/polygon_pink.svg +0 -0
  176. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/polygon_yellow.svg +0 -0
  177. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/pressure_cooker_logo.png +0 -0
  178. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/python_den.png +0 -0
  179. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/python_den_banner.svg +0 -0
  180. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/rapid_router.png +0 -0
  181. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/rapid_router_landing_hero.png +0 -0
  182. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/rapidrouter.png +0 -0
  183. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/resources_hero.jpg +0 -0
  184. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/resources_montage.jpg +0 -0
  185. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/reuben.png +0 -0
  186. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/rob.png +0 -0
  187. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/rr_beginner.png +0 -0
  188. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/rr_intermediate.png +0 -0
  189. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/sadface.png +0 -0
  190. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/sharon_harrison.jpg +0 -0
  191. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/sian.png +0 -0
  192. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/teaching_resources_hero.jpg +0 -0
  193. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/ten_year_map_pin.svg +0 -0
  194. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/thumbnail_educate_rapid_router.png +0 -0
  195. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/thumbnail_educate_resources.png +0 -0
  196. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/thumbnail_intro_c4l.jpg +0 -0
  197. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/thumbnail_play_rapid_router.png +0 -0
  198. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/thumbnail_python_den.png +0 -0
  199. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/twitter.png +0 -0
  200. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/universities.png +0 -0
  201. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/wes.png +0 -0
  202. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/img/x_close_video.png +0 -0
  203. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/js/bootstrap.min.js +0 -0
  204. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/js/carouselCards.js +0 -0
  205. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/js/independentLogin.js +0 -0
  206. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/js/independentRegistration.js +0 -0
  207. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/js/join_create_game_toggle.js +0 -0
  208. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/js/jquery.placeholder.js +0 -0
  209. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/js/levelControl.js +0 -0
  210. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/js/lib/jquery-video-lightning.js +0 -0
  211. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/js/lib/jquery.colorbox.js +0 -0
  212. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/js/lib/jquery.easy-ticker.js +0 -0
  213. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/js/lib/jquery.min.js +0 -0
  214. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/js/lib/modernizr-build.js +0 -0
  215. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/js/lib/papaparse.min.js +0 -0
  216. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/js/organisation_manage.js +0 -0
  217. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/js/passwordStrength.js +0 -0
  218. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/js/play.js +0 -0
  219. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/js/resetPassword.js +0 -0
  220. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/js/riveted.min.js +0 -0
  221. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/js/school.js +0 -0
  222. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/js/sticky_subnav.js +0 -0
  223. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/js/studentLogin.js +0 -0
  224. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/js/teach_browser.js +0 -0
  225. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/js/teach_class.js +0 -0
  226. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/js/teacherEditStudent.js +0 -0
  227. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/js/teacherLogin.js +0 -0
  228. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/js/tenYearMap.js +0 -0
  229. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_alerts.scss +0 -0
  230. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_badges.scss +0 -0
  231. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_breadcrumbs.scss +0 -0
  232. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_button-groups.scss +0 -0
  233. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_buttons.scss +0 -0
  234. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_carousel.scss +0 -0
  235. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_close.scss +0 -0
  236. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_code.scss +0 -0
  237. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_component-animations.scss +0 -0
  238. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_dropdowns.scss +0 -0
  239. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_forms.scss +0 -0
  240. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_glyphicons.scss +0 -0
  241. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_grid.scss +0 -0
  242. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_input-groups.scss +0 -0
  243. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_jumbotron.scss +0 -0
  244. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_labels.scss +0 -0
  245. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_list-group.scss +0 -0
  246. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_media.scss +0 -0
  247. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_mixins.scss +0 -0
  248. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_modals.scss +0 -0
  249. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_navbar.scss +0 -0
  250. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_navs.scss +0 -0
  251. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_normalize.scss +0 -0
  252. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_pager.scss +0 -0
  253. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_pagination.scss +0 -0
  254. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_panels.scss +0 -0
  255. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_popovers.scss +0 -0
  256. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_print.scss +0 -0
  257. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_progress-bars.scss +0 -0
  258. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_responsive-embed.scss +0 -0
  259. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_responsive-utilities.scss +0 -0
  260. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_scaffolding.scss +0 -0
  261. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_tables.scss +0 -0
  262. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_theme.scss +0 -0
  263. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_thumbnails.scss +0 -0
  264. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_tooltip.scss +0 -0
  265. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_type.scss +0 -0
  266. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_utilities.scss +0 -0
  267. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_variables.scss +0 -0
  268. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/_wells.scss +0 -0
  269. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/mixins/_alerts.scss +0 -0
  270. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/mixins/_background-variant.scss +0 -0
  271. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/mixins/_border-radius.scss +0 -0
  272. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/mixins/_breakpoints.scss +0 -0
  273. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/mixins/_buttons.scss +0 -0
  274. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/mixins/_center-block.scss +0 -0
  275. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/mixins/_clearfix.scss +0 -0
  276. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/mixins/_forms.scss +0 -0
  277. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/mixins/_gradients.scss +0 -0
  278. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/mixins/_grid-framework.scss +0 -0
  279. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/mixins/_grid.scss +0 -0
  280. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/mixins/_hide-text.scss +0 -0
  281. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/mixins/_image.scss +0 -0
  282. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/mixins/_labels.scss +0 -0
  283. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/mixins/_list-group.scss +0 -0
  284. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/mixins/_nav-divider.scss +0 -0
  285. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/mixins/_nav-vertical-align.scss +0 -0
  286. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/mixins/_opacity.scss +0 -0
  287. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/mixins/_pagination.scss +0 -0
  288. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/mixins/_panels.scss +0 -0
  289. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/mixins/_progress-bar.scss +0 -0
  290. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/mixins/_reset-filter.scss +0 -0
  291. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/mixins/_reset-text.scss +0 -0
  292. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/mixins/_resize.scss +0 -0
  293. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/mixins/_responsive-visibility.scss +0 -0
  294. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/mixins/_size.scss +0 -0
  295. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/mixins/_tab-focus.scss +0 -0
  296. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/mixins/_table-row.scss +0 -0
  297. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/mixins/_text-emphasis.scss +0 -0
  298. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/mixins/_text-overflow.scss +0 -0
  299. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/mixins/_text-truncate.scss +0 -0
  300. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap/mixins/_vendor-prefixes.scss +0 -0
  301. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap.scss +0 -0
  302. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap_mixins/_all.scss +0 -0
  303. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap_mixins/_border-radius.scss +0 -0
  304. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap_mixins/_box-shadow.scss +0 -0
  305. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap_mixins/_hover.scss +0 -0
  306. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap_mixins/_nav-divider.scss +0 -0
  307. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap_partials/_dropdown.scss +0 -0
  308. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap_partials/_glyphicons.scss +0 -0
  309. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap_partials/_grid.scss +0 -0
  310. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap_partials/_variables.scss +0 -0
  311. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap_utilities/_align.scss +0 -0
  312. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap_utilities/_background.scss +0 -0
  313. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap_utilities/_borders.scss +0 -0
  314. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap_utilities/_clearfix.scss +0 -0
  315. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap_utilities/_cursor.scss +0 -0
  316. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap_utilities/_display.scss +0 -0
  317. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap_utilities/_flex.scss +0 -0
  318. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap_utilities/_float.scss +0 -0
  319. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap_utilities/_position.scss +0 -0
  320. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap_utilities/_screenreaders.scss +0 -0
  321. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap_utilities/_sizing.scss +0 -0
  322. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap_utilities/_spacing.scss +0 -0
  323. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap_utilities/_text.scss +0 -0
  324. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/bootstrap_utilities/_visibility.scss +0 -0
  325. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/colorbox.scss +0 -0
  326. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/modules/_all.scss +0 -0
  327. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/modules/_animation.scss +0 -0
  328. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/modules/_breakpoints.scss +0 -0
  329. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/modules/_card_constants.scss +0 -0
  330. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/modules/_homepage_constants.scss +0 -0
  331. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/modules/_spacing.scss +0 -0
  332. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/partials/_banners.scss +0 -0
  333. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/partials/_base.scss +0 -0
  334. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/partials/_carousel.scss +0 -0
  335. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/partials/_footer.scss +0 -0
  336. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/partials/_forms.scss +0 -0
  337. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/partials/_grids.scss +0 -0
  338. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/partials/_images.scss +0 -0
  339. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/partials/_progress-bars.scss +0 -0
  340. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/partials/_subnavs.scss +0 -0
  341. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/partials/_tables.scss +0 -0
  342. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/partials/_text.scss +0 -0
  343. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/partials/_ui-dialog.scss +0 -0
  344. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/partials/_utils.scss +0 -0
  345. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/sass/styles.scss +0 -0
  346. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/static/portal/video/code for life .pdf +0 -0
  347. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/strings/__init__.py +0 -0
  348. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/strings/about.py +0 -0
  349. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/strings/coding_club.py +0 -0
  350. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/strings/help_and_support.py +0 -0
  351. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/strings/home_learning.py +0 -0
  352. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/strings/materials.py +0 -0
  353. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/strings/play.py +0 -0
  354. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/strings/teach.py +0 -0
  355. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/strings/teacher_resources.py +0 -0
  356. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/strings/ten_year_map.py +0 -0
  357. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/403.html +0 -0
  358. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/404.html +0 -0
  359. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/500.html +0 -0
  360. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/captcha/includes/js_v2_invisible.html +0 -0
  361. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/captcha/widget_v2_invisible.html +0 -0
  362. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/email.html +0 -0
  363. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/email.txt +0 -0
  364. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/about.html +0 -0
  365. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/base_no_userprofile.html +0 -0
  366. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/coding_club.html +0 -0
  367. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/contribute.html +0 -0
  368. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/dotmailer_consent_form.html +0 -0
  369. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/email_invitation_sent.html +0 -0
  370. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/email_style_template.html +0 -0
  371. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/email_verification_failed.html +0 -0
  372. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/email_verification_needed.html +0 -0
  373. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/form_shapes.html +0 -0
  374. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/getinvolved.html +0 -0
  375. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/home.html +0 -0
  376. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/locked_out.html +0 -0
  377. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/locked_out_school_student.html +0 -0
  378. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/login/independent_student.html +0 -0
  379. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/login/student.html +0 -0
  380. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/login/student_class_code.html +0 -0
  381. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/login/teacher.html +0 -0
  382. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/mouseflow.html +0 -0
  383. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/partials/banner.html +0 -0
  384. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/partials/benefits.html +0 -0
  385. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/partials/card_list.html +0 -0
  386. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/partials/character_list.html +0 -0
  387. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/partials/delete_popup.html +0 -0
  388. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/partials/footer.html +0 -0
  389. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/partials/headline.html +0 -0
  390. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/partials/hero_card.html +0 -0
  391. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/partials/info_popup.html +0 -0
  392. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/partials/invite_admin_teacher.html +0 -0
  393. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/partials/popup.html +0 -0
  394. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/partials/register_newsletter_tickbox.html +0 -0
  395. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/partials/screentime_popup.html +0 -0
  396. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/partials/service_unavailable_popup.html +0 -0
  397. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/partials/session_popup.html +0 -0
  398. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/partials/teacher_non_dashboard_subnav.html +0 -0
  399. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/partials/teacher_non_dashboard_subnav_account.html +0 -0
  400. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/play/student_dashboard.html +0 -0
  401. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/play/student_edit_account.html +0 -0
  402. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/play/student_join_organisation.html +0 -0
  403. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/play.html +0 -0
  404. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/privacy_notice.html +0 -0
  405. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/register.html +0 -0
  406. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/reset_password.html +0 -0
  407. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/reset_password_confirm.html +0 -0
  408. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/reset_password_done.html +0 -0
  409. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/reset_password_email_sent.html +0 -0
  410. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/tag_manager/tag_manager_body.html +0 -0
  411. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/tag_manager/tag_manager_head.html +0 -0
  412. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/teach/base_registering.html +0 -0
  413. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/teach/class.html +0 -0
  414. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/teach/dashboard.html +0 -0
  415. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/teach/invited.html +0 -0
  416. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/teach/onboarding_classes.html +0 -0
  417. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/teach/onboarding_print.html +0 -0
  418. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/teach/onboarding_school.html +0 -0
  419. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/teach/onboarding_students.html +0 -0
  420. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/teach/teacher_add_external_student.html +0 -0
  421. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/teach/teacher_added_external_student.html +0 -0
  422. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/teach/teacher_dismiss_students.html +0 -0
  423. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/teach/teacher_edit_class.html +0 -0
  424. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/teach/teacher_edit_student.html +0 -0
  425. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/teach/teacher_move_all_classes.html +0 -0
  426. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/teach/teacher_move_students.html +0 -0
  427. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/teach/teacher_move_students_to_class.html +0 -0
  428. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/teach.html +0 -0
  429. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/ten_year_map.html +0 -0
  430. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/portal/terms.html +0 -0
  431. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/two_factor/_base.html +0 -0
  432. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/two_factor/_wizard_actions.html +0 -0
  433. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/two_factor/_wizard_actions_enable_2fa.html +0 -0
  434. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/two_factor/_wizard_actions_submit.html +0 -0
  435. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/two_factor/_wizard_forms.html +0 -0
  436. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/two_factor/_wizard_forms_token.html +0 -0
  437. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/two_factor/backup_token.html +0 -0
  438. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/two_factor/core/backup_tokens.html +0 -0
  439. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/two_factor/core/login.html +0 -0
  440. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/two_factor/core/setup.html +0 -0
  441. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/two_factor/core/setup_complete.html +0 -0
  442. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/two_factor/profile/disable.html +0 -0
  443. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/two_factor/profile/profile.html +0 -0
  444. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templates/two_factor/setup_wizard_token.html +0 -0
  445. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templatetags/__init__.py +0 -0
  446. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templatetags/app_tags.py +0 -0
  447. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templatetags/banner_tags.py +0 -0
  448. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templatetags/benefits_tags.py +0 -0
  449. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templatetags/card_list_tags.py +0 -0
  450. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templatetags/future.py +0 -0
  451. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templatetags/headline_tags.py +0 -0
  452. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templatetags/hero_card_tags.py +0 -0
  453. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/templatetags/table_tags.py +0 -0
  454. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/__init__.py +0 -0
  455. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/base_test.py +0 -0
  456. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/conftest.py +0 -0
  457. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/migrations/__init__.py +0 -0
  458. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/migrations/test_migration_make_portaladmin_teacher.py +0 -0
  459. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/migrations/test_migration_preview_user_remove.py +0 -0
  460. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/migrations/test_migration_preview_users.py +0 -0
  461. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/migrations/test_migration_remove_front_page_news.py +0 -0
  462. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/migrations/test_migration_remove_guardian.py +0 -0
  463. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/migrations/test_migration_use_common_models.py +0 -0
  464. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/migrations/test_migration_verify_portaladmin.py +0 -0
  465. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/__init__.py +0 -0
  466. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/__init__.py +0 -0
  467. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/admin/__init__.py +0 -0
  468. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/admin/admin_base_page.py +0 -0
  469. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/admin/admin_data_page.py +0 -0
  470. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/admin/admin_map_page.py +0 -0
  471. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/base_page.py +0 -0
  472. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/email_verification_needed_page.py +0 -0
  473. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/forbidden_page.py +0 -0
  474. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/game_page.py +0 -0
  475. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/home_page.py +0 -0
  476. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/independent_login_page.py +0 -0
  477. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/password_reset_form_page.py +0 -0
  478. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/password_reset_page.py +0 -0
  479. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/play/__init__.py +0 -0
  480. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/play/account_page.py +0 -0
  481. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/play/dashboard_page.py +0 -0
  482. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/play/join_school_or_club_page.py +0 -0
  483. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/play/play_base_page.py +0 -0
  484. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/play_page.py +0 -0
  485. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/resources_page.py +0 -0
  486. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/signup_page.py +0 -0
  487. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/student_login_class_code.py +0 -0
  488. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/student_login_page.py +0 -0
  489. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/teach/__init__.py +0 -0
  490. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/teach/add_independent_student_to_class_page.py +0 -0
  491. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/teach/added_independent_student_to_class_page.py +0 -0
  492. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/teach/class_page.py +0 -0
  493. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/teach/dashboard_page.py +0 -0
  494. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/teach/dismiss_students_page.py +0 -0
  495. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/teach/edit_student_page.py +0 -0
  496. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/teach/move_class_page.py +0 -0
  497. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/teach/move_classes_page.py +0 -0
  498. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/teach/move_students_disambiguate_page.py +0 -0
  499. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/teach/move_students_page.py +0 -0
  500. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/teach/onboarding_classes_page.py +0 -0
  501. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/teach/onboarding_organisation_page.py +0 -0
  502. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/teach/onboarding_student_list_page.py +0 -0
  503. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/teach/onboarding_students_page.py +0 -0
  504. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/teach/teach_base_page.py +0 -0
  505. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/pageObjects/portal/teacher_login_page.py +0 -0
  506. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/selenium_test_case.py +0 -0
  507. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/snapshots/__init__.py +0 -0
  508. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/snapshots/snap_test_partials.py +0 -0
  509. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/test_2FA.py +0 -0
  510. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/test_admin.py +0 -0
  511. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/test_api.py +0 -0
  512. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/test_captcha_forms.py +0 -0
  513. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/test_class.py +0 -0
  514. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/test_daily_activities.py +0 -0
  515. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/test_helper_methods.py +0 -0
  516. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/test_independent_student.py +0 -0
  517. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/test_invite_teacher.py +0 -0
  518. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/test_middleware.py +0 -0
  519. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/test_organisation.py +0 -0
  520. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/test_partials.py +0 -0
  521. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/test_ratelimit.py +0 -0
  522. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/test_school_student.py +0 -0
  523. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/test_security.py +0 -0
  524. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/test_teacher.py +0 -0
  525. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/test_teacher_student.py +0 -0
  526. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/test_views.py +0 -0
  527. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/utils/__init__.py +0 -0
  528. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/utils/classes.py +0 -0
  529. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/tests/utils/messages.py +0 -0
  530. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/views/__init__.py +0 -0
  531. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/views/about.py +0 -0
  532. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/views/admin.py +0 -0
  533. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/views/api.py +0 -0
  534. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/views/cron/__init__.py +0 -0
  535. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/views/cron/user.py +0 -0
  536. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/views/email.py +0 -0
  537. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/views/home.py +0 -0
  538. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/views/legal.py +0 -0
  539. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/views/login/__init__.py +0 -0
  540. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/views/login/independent_student.py +0 -0
  541. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/views/login/student.py +0 -0
  542. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/views/login/teacher.py +0 -0
  543. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/views/organisation.py +0 -0
  544. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/views/play_landing_page.py +0 -0
  545. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/views/registration.py +0 -0
  546. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/views/student/__init__.py +0 -0
  547. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/views/student/edit_account_details.py +0 -0
  548. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/views/student/play.py +0 -0
  549. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/views/teach.py +0 -0
  550. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/views/teacher/__init__.py +0 -0
  551. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/views/teacher/teach.py +0 -0
  552. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/views/two_factor/__init__.py +0 -0
  553. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/views/two_factor/core.py +0 -0
  554. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/views/two_factor/form.py +0 -0
  555. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/views/two_factor/profile.py +0 -0
  556. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/portal/wsgi.py +0 -0
  557. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/pyproject.toml +0 -0
  558. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/setup.cfg +0 -0
  559. {codeforlife-portal-7.3.7 → codeforlife-portal-7.4.0}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: codeforlife-portal
3
- Version: 7.3.7
3
+ Version: 7.4.0
4
4
  Classifier: Programming Language :: Python
5
5
  Classifier: Programming Language :: Python :: 3.12
6
6
  Classifier: Framework :: Django
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: codeforlife-portal
3
- Version: 7.3.7
3
+ Version: 7.4.0
4
4
  Classifier: Programming Language :: Python
5
5
  Classifier: Programming Language :: Python :: 3.12
6
6
  Classifier: Framework :: Django
@@ -388,6 +388,7 @@ portal/templates/portal/partials/benefits.html
388
388
  portal/templates/portal/partials/card_list.html
389
389
  portal/templates/portal/partials/character_list.html
390
390
  portal/templates/portal/partials/delete_popup.html
391
+ portal/templates/portal/partials/donate_popup.html
391
392
  portal/templates/portal/partials/footer.html
392
393
  portal/templates/portal/partials/header.html
393
394
  portal/templates/portal/partials/headline.html
@@ -456,11 +457,11 @@ portal/tests/test_captcha_forms.py
456
457
  portal/tests/test_class.py
457
458
  portal/tests/test_daily_activities.py
458
459
  portal/tests/test_emails.py
460
+ portal/tests/test_global_forms.py
459
461
  portal/tests/test_helper_methods.py
460
462
  portal/tests/test_independent_student.py
461
463
  portal/tests/test_invite_teacher.py
462
464
  portal/tests/test_middleware.py
463
- portal/tests/test_newsletter_footer.py
464
465
  portal/tests/test_organisation.py
465
466
  portal/tests/test_partials.py
466
467
  portal/tests/test_ratelimit.py
@@ -13,7 +13,7 @@ django-classy-tags==2.0.0
13
13
  libsass==0.23.0
14
14
  phonenumbers==8.12.12
15
15
  more-itertools==8.7.0
16
- cfl-common==7.3.7
16
+ cfl-common==7.4.0
17
17
  django-ratelimit==3.0.1
18
18
  django-preventconcurrentlogins==0.8.2
19
19
  django-csp==3.7
@@ -0,0 +1 @@
1
+ __version__ = "7.4.0"
@@ -0,0 +1,9 @@
1
+ from portal.forms.dotmailer import DonateForm, NewsletterForm
2
+
3
+
4
+ def process_newsletter_form(request):
5
+ return {"news_form": NewsletterForm()}
6
+
7
+
8
+ def process_donate_form(request):
9
+ return {"donate_form": DonateForm()}
@@ -0,0 +1,55 @@
1
+ from django import forms
2
+
3
+
4
+ class NewsletterForm(forms.Form):
5
+ email = forms.EmailField(
6
+ label="Sign up to receive updates about Code for Life games and teaching resources.",
7
+ label_suffix="",
8
+ widget=forms.EmailInput(
9
+ attrs={
10
+ "placeholder": "Your email address",
11
+ "id": "newsletter_email_field",
12
+ }
13
+ ),
14
+ help_text="Enter email address above",
15
+ )
16
+
17
+ age_verification = forms.BooleanField(
18
+ widget=forms.CheckboxInput(), initial=False, required=True
19
+ )
20
+
21
+
22
+ class DonateForm(forms.Form):
23
+ email = forms.EmailField(
24
+ label="This data will only be used for this purpose and you will be "
25
+ "able to opt out anytime. Please read our privacy notice for "
26
+ "further details.",
27
+ label_suffix="",
28
+ widget=forms.EmailInput(
29
+ attrs={
30
+ "placeholder": "Enter your email address",
31
+ "id": "donate_email_field",
32
+ }
33
+ ),
34
+ help_text="Enter your email address",
35
+ )
36
+
37
+ age_verification = forms.BooleanField(
38
+ widget=forms.CheckboxInput(attrs={"id": "donate_age_verification"}),
39
+ initial=False,
40
+ required=True,
41
+ )
42
+
43
+
44
+ class ConsentForm(forms.Form):
45
+ email = forms.EmailField(
46
+ label="Email",
47
+ label_suffix="",
48
+ widget=forms.EmailInput(
49
+ attrs={"placeholder": "your.name@yourdomain.com"}
50
+ ),
51
+ )
52
+
53
+ consent_ticked = forms.BooleanField(
54
+ widget=forms.CheckboxInput(), initial=False, required=True
55
+ )
@@ -38,13 +38,42 @@ function hidePopupConfirmation() {
38
38
  $("#popup").find(".popup-text").remove();
39
39
  }
40
40
 
41
+ function showDonatePopup(title, text) {
42
+ let popup = $("#donate-popup");
43
+ popup.find(".popup-box__title").text(title);
44
+ popup.find(".popup-box__msg").append(text);
41
45
 
42
- /**
46
+ popup.addClass("popup--fade");
47
+ }
48
+
49
+ function hideDonatePopup() {
50
+ $("#donate-popup").removeClass("popup--fade");
51
+ $("#donate-popup").find(".popup-text").remove();
52
+ $("#donate_email_field").val("");
53
+ $('#donate_age_verification').prop("checked", false);
54
+ const donateSubmitButton = $('#confirm_donate_button');
55
+ donateSubmitButton.addClass("disabled");
56
+ donateSubmitButton.prop("disabled", true);
57
+ }
43
58
 
44
- Show a service unavailable popup with a close button in the top-right corner.
45
- @param {String} title The title of the popup.
46
- @param {String} text The message of the popup.
47
- */
59
+ function showDonateConfirmation(path) {
60
+ let title = "We would love to have you support our non-profit mission! ❤️";
61
+ let text =
62
+ "<div class='popup-text'>" +
63
+ "<h6>If you would like to be added to a mailing list and find out" +
64
+ " more about how you could support our mission, please add your" +
65
+ " email below.</h6>" +
66
+ "</div>";
67
+ let confirm_handler = "postWithCsrf('" + path + "')";
68
+
69
+ showDonatePopup(title, text, confirm_handler);
70
+ }
71
+
72
+ /**
73
+ * Show a service unavailable popup with a close button in the top-right corner.
74
+ * @param {String} title The title of the popup.
75
+ * @param {String} text The message of the popup.
76
+ */
48
77
 
49
78
  function showServiceUnavailable(title, text) {
50
79
  let popup = $("#service-unavailable-popup");
@@ -57,6 +86,7 @@ function showServiceUnavailable(title, text) {
57
86
  function hideServiceUnavailable() {
58
87
  $("#service-unavailable-popup").removeClass("popup--fade");
59
88
  }
89
+
60
90
  /**
61
91
  * Show an info popup with a close button in the top-right corner.
62
92
  * @param {String} title The title of the popup.
@@ -63,6 +63,9 @@ $color-button-contained-disabled: $color-secondary-100;
63
63
  $color-button-outlined-border: $color-secondary-600;
64
64
  $color-button-outlined-border-active: $color-secondary-600;
65
65
  $color-button-subnav-border: white;
66
+ $color-button-pill: #86ae18;
67
+ $color-button-pill-hover: #82a210;
68
+ $color-button-pill-active: #82a210;
66
69
  // Old buttons
67
70
  $color-button-primary-action-navigation: $color-secondary;
68
71
  $color-button-primary-action-navigation-hover: $color-secondary;
@@ -1,4 +1,4 @@
1
1
  $hover-content-level: 100;
2
2
  $nav-bar-level: 1001;
3
- $popup-overlay-level: 300;
3
+ $popup-overlay-level: 1100;
4
4
  $behind-content-level: -100;
@@ -55,6 +55,11 @@
55
55
  calculate-rem($radius-bottom-left);
56
56
  }
57
57
 
58
+ @mixin _border-radius-all($radius) {
59
+ border-radius: calculate-rem($radius) calculate-rem($radius)
60
+ calculate-rem($radius) calculate-rem($radius);
61
+ }
62
+
58
63
  @mixin _box-shadow($h-offset, $v-offset, $blur, $spread, $color) {
59
64
  box-shadow: calculate-rem($h-offset) calculate-rem($v-offset)
60
65
  calculate-rem($blur) calculate-rem($spread) $color;
@@ -89,7 +89,6 @@ table {
89
89
  color: $color-text-primary;
90
90
  box-shadow: none;
91
91
  }
92
-
93
92
  }
94
93
 
95
94
  /* Outlined button */
@@ -139,6 +138,30 @@ table {
139
138
  }
140
139
  }
141
140
 
141
+ /* Green button */
142
+ .button--tertiary {
143
+ @include _padding(10px, 15px, 10px, 15px);
144
+ background: $color-button-pill;
145
+ color: $color-text-secondary;
146
+
147
+ &:hover:not(.disabled){
148
+ @include material-shadow();
149
+ background: $color-button-pill-hover;
150
+ color: $color-text-secondary;
151
+ text-decoration: none;
152
+ }
153
+
154
+ &:active:not(.disabled) {
155
+ background: $color-button-pill-active;
156
+ color: $color-text-secondary;
157
+ box-shadow: none;
158
+ }
159
+ }
160
+
161
+ .button--pill {
162
+ @include _border-radius-all(20px);
163
+ }
164
+
142
165
  .button-right-arrow {
143
166
  &:after {
144
167
  content: "\e5e1";
@@ -172,8 +195,6 @@ table {
172
195
  }
173
196
 
174
197
  .button--menu {
175
- background-color: transparent;
176
- border-radius: 0;
177
198
  text-decoration: none;
178
199
  }
179
200
 
@@ -416,6 +437,13 @@ td .button--primary {
416
437
  justify-content: center;
417
438
  }
418
439
 
440
+ &.button--donate {
441
+ background: $color-button-pill;
442
+ border: 0;
443
+ color: $color-text-secondary;
444
+ justify-content: center;
445
+ }
446
+
419
447
  &.button--header--login {
420
448
  border: 2px solid $color-secondary-600;
421
449
  margin: 0;
@@ -260,13 +260,14 @@
260
260
  width: 100%;
261
261
  z-index: $nav-bar-level;
262
262
 
263
- .button--menu {
264
- border-radius: 0;
263
+ .button--menu:hover,
264
+ .button--menu:focus, {
265
+ font-weight: normal;
266
+ }
265
267
 
266
- &:hover,
267
- &:focus {
268
- font-weight: normal;
269
- }
268
+ .button--pill:hover,
269
+ .button--pill:focus, {
270
+ font-weight: 600;
270
271
  }
271
272
 
272
273
  .button--menu--secondary {
@@ -20,9 +20,9 @@
20
20
  .popup-box {
21
21
  background-color: $color-background-secondary;
22
22
  box-shadow: 0 0 4 * $spacing $color-background-box-shadow;
23
- margin: 20% auto 0;
23
+ margin: 10% auto;
24
24
  overflow: hidden;
25
- width: 460px;
25
+ width: 520px;
26
26
 
27
27
  .popup-box__msg {
28
28
  @include _padding(0px, 5 * $spacing, 5 * $spacing, 5 * $spacing);
@@ -47,6 +47,7 @@
47
47
  .popup-box__title {
48
48
  @include _padding(5 * $spacing, 5 * $spacing, 0px, 5 * $spacing);
49
49
  background-color: $color-background-secondary;
50
+ color: $color-text-primary;
50
51
  display: flex;
51
52
  justify-content: flex-start;
52
53
  font-family: "Space Grotesk", sans-serif;
@@ -57,6 +58,10 @@
57
58
  min-width:0;
58
59
  @include _margin(8px, 8px, 8px, 8px);
59
60
  }
61
+
62
+ label {
63
+ text-align: left;
64
+ }
60
65
  }
61
66
 
62
67
  &#screentime-popup,
@@ -32,7 +32,6 @@
32
32
  type="image/x-icon">
33
33
  {% endblock css %}
34
34
  {% include "portal/tag_manager/tag_manager_head.html" %}
35
-
36
35
  <script type="text/javascript" src="{% static 'portal/js/lib/modernizr-build.js' %}"></script>
37
36
  <script type="text/javascript" src="{% static 'portal/js/common.js' %}"></script>
38
37
  <script type="text/javascript" src="{% static 'portal/js/jquery.placeholder.js' %}"></script>
@@ -82,6 +81,7 @@
82
81
  {% include "portal/tag_manager/tag_manager_body.html" %}
83
82
  {% render_block "js" %}
84
83
  {% include 'portal/mouseflow.html' %}
84
+ {% include "portal/partials/donate_popup.html" %}
85
85
  <div class="content-footer-wrapper">
86
86
  {% block contentWrapper %}
87
87
  <div {% block pageID %}id="contentWrapper"{% endblock %}>
@@ -240,16 +240,25 @@
240
240
  });
241
241
  </script>
242
242
  <script>
243
- // disable newsletter signup button by default
243
+ // disable newsletter signup and donate buttons by default
244
244
  const newsletterSubmitButton = $('#submit_newsletter');
245
245
  newsletterSubmitButton.addClass("disabled");
246
246
  newsletterSubmitButton.prop("disabled", true);
247
247
 
248
- // enable it or disable it depending on age verification checkbox
248
+ const donateSubmitButton = $('#confirm_donate_button');
249
+ donateSubmitButton.addClass("disabled");
250
+ donateSubmitButton.prop("disabled", true);
251
+
252
+ // enable them or disable them depending on age verification checkbox
249
253
  $('#id_age_verification').on("click", function() {
250
254
  newsletterSubmitButton.prop("disabled", !this.checked);
251
255
  newsletterSubmitButton.toggleClass("disabled", !this.checked);
252
256
  });
257
+
258
+ $('#donate_age_verification').on("click", function() {
259
+ donateSubmitButton.prop("disabled", !this.checked);
260
+ donateSubmitButton.toggleClass("disabled", !this.checked);
261
+ })
253
262
  </script>
254
263
  {% endblock scripts %}
255
264
  </body>
@@ -15,8 +15,8 @@
15
15
  <div class="row">
16
16
  <div class="col-sm-6">
17
17
  <p>Rapid Router is our shopping delivery game that teaches children aged 5–14 to learn how to code using
18
- Blockly and Python.</p>
19
- <p>The game and lessons support the English National Curriculum Computing strand, and Teachers across the
18
+ Blockly. The pupils can then progress to Python Den to continue to build up their skills.</p>
19
+ <p>The game and lessons support the English National Curriculum Computing strand, and teachers across the
20
20
  world love them.</p>
21
21
  <p>Now, we’ve made lessons available for parents and caregivers to teach at home, so we can #KeepKidsCoding.
22
22
  They're free and easy, but most of all, they’re fun!</p>
@@ -55,7 +55,7 @@
55
55
  algorithms, and learn how to create and debug simple programs. Designed for children aged 5–7,
56
56
  but start here if you’ve never played Rapid Router.
57
57
  </div>
58
- <a class="button" href="https://code-for-life.gitbook.io/independent-student-resources/beginner/" target="_blank">
58
+ <a class="button" href="https://code-for-life.gitbook.io/independent-student-resources/rapid-router-resources/beginner" target="_blank">
59
59
  <button class="button--primary button--icon">
60
60
  Go to lessons<span class="iconify" data-icon="mdi:open-in-new"></span>
61
61
  </button>
@@ -121,7 +121,7 @@
121
121
  programming constructs. Designed for children aged 8–11, but anyone can progress here if
122
122
  ready.
123
123
  </div>
124
- <a class="button" href="https://code-for-life.gitbook.io/independent-student-resources/intermediate/" target="_blank">
124
+ <a class="button" href="https://code-for-life.gitbook.io/independent-student-resources/rapid-router-resources/intermediate" target="_blank">
125
125
  <button class="button--primary button--icon">
126
126
  Go to lessons<span class="iconify" data-icon="mdi:open-in-new"></span>
127
127
  </button>
@@ -150,7 +150,7 @@
150
150
  <div>Let’s get advanced! Learn about repeat loops and selection, variables, and how to create
151
151
  efficient code. Designed for children aged 12–14, but open to all.
152
152
  </div>
153
- <a class="button" href="https://code-for-life.gitbook.io/independent-student-resources/advanced/" target="_blank">
153
+ <a class="button" href="https://code-for-life.gitbook.io/independent-student-resources/rapid-router-resources/advanced" target="_blank">
154
154
  <button class="button--primary button--icon">
155
155
  Go to lessons<span class="iconify" data-icon="mdi:open-in-new"></span>
156
156
  </button>
@@ -171,10 +171,11 @@
171
171
  <h6>Session 3 & 4</h6>
172
172
  <p>Extra tasks for children who want a challenge! Watch the if...do video to learn about selection
173
173
  statements. Ask your child to explain how their finished program works!</p>
174
+ <h6>Session 5</h6>
175
+ <p>Learn more about if...else through traffic lights. In the Traffic Lights levels in Rapid Router, traffic light is a variable that either contains red or green.</p>
174
176
  <h6>Extended</h6>
175
177
  <p>Build on everything learned so far with traffic lights, limited blocks, procedures and brain teasers.
176
- Older children might even like to start learning to program using the Python language using levels
177
- 80 onwards.</p>
178
+ Older children might even like to start learning to program using the Python language using <a href="{% url 'python_levels' %}">Python Den</a>.</p>
178
179
  </div>
179
180
  </div>
180
181
  </div>
@@ -0,0 +1,46 @@
1
+ {% load static %}
2
+ {% load app_tags %}
3
+ {# A popup with a form input for email addresses. #}
4
+ <section id="donate-popup" class="popup-wrapper">
5
+ <div class="popup-box">
6
+ <div>
7
+ <button type="button" onclick="hideDonatePopup()" class="close popup-box__close" aria-label="Close">
8
+ <span class="iconify" data-icon="mdi:close"></span>
9
+ </button>
10
+ </div>
11
+ <div class="popup-box__title"></div>
12
+ <div class="popup-box__msg"></div>
13
+ <form id="donate_form" action="{% url 'process_donate_form' %}"
14
+ method="post">
15
+ <div class="col-sm-12">
16
+ {{ donate_form.non_field_errors }}
17
+ <div class="form--row">
18
+ <div class="form--row__input">
19
+ <label><small>{{ donate_form.email.label }}</small></label>
20
+ <div class="input--icon">
21
+ {{ donate_form.email }}
22
+ <span class="iconify" data-icon="mdi:email-outline"></span>
23
+ </div>
24
+ {{ donate_form.email.errors }}
25
+ <small>{{ donate_form.email.help_text }}</small>
26
+ </div>
27
+ </div>
28
+ <div class="form--row justify-content-between">
29
+ <div class="form__checkbox">
30
+ <div class="form__checkbox-input">
31
+ {{ donate_form.age_verification }}
32
+ </div>
33
+ <p class="p-0">Please confirm that you are over 18.</p>
34
+ </div>
35
+ </div>
36
+ </div>
37
+ <div class="popup-box__buttons">
38
+ <a class="button button--small button--secondary button--secondary--dark"
39
+ onclick="hideDonatePopup()" aria-labelledby="cancel_button">Cancel</a>
40
+ <button type="submit" id="confirm_donate_button"
41
+ class='button button--small button--primary'
42
+ aria-labelledby="confirm_button">Confirm</button>
43
+ </div>
44
+ </form>
45
+ </div>
46
+ </section>
@@ -57,6 +57,7 @@
57
57
  <a class="button--menu button--menu--secondary button--menu--disabled">Games</a>
58
58
  <a class="button--menu button--menu--secondary button--menu--disabled">Teaching Resources</a>
59
59
  {% endif %}
60
+ <button onclick="showDonateConfirmation()" class="button--menu button--pill button--tertiary">Donate</button>
60
61
  {% else %}
61
62
  {% if user|is_independent_student %}
62
63
  <div class="menu--title">Independent</div>
@@ -103,6 +104,7 @@
103
104
  <div class="menu__left-side col-md-5">
104
105
  <a href="{% url 'teach' %}" class="button--menu button--menu--primary button--menu--enabled">Teachers</a>
105
106
  <a href="{% url 'play' %}" class="button--menu button--menu--primary button--menu--enabled">Students</a>
107
+ <button id="donate" onclick="showDonateConfirmation()" class="button--menu button--pill button--tertiary">Donate</button>
106
108
  {% endif %}
107
109
  </div>
108
110
  {% if user|is_logged_in %}
@@ -145,36 +147,36 @@
145
147
  {% endif %}
146
148
  </ul>
147
149
  </div>
148
- {% else %}
149
- <div class="menu__right-side col-md-5">
150
- <a href="{% url 'register' %}" id="signup_button" class="button button--primary button--register register">Register</a>
151
- <div class="dropdown">
152
- <button id="login_dropdown" class="button--regular button--secondary button--header--login button--dropdown"
153
- data-toggle="dropdown">
154
- <div class="dropdown__text">Log in</div>
155
- </button>
156
- <ul class="dropdown-menu header__login-options-dropdown-menu">
157
- <li class="dropdown-menu__option">
158
- <a id="teacher_login_button" class="button--regular" aria-labelledby="Teacher" href="{% url 'teacher_login' %}">
159
- <div class="dropdown-menu__option__text">Teacher</div>
160
- <span data-nosnippet class="material-icons-outlined">chevron_right</span>
161
- </a>
162
- </li>
163
- <li class="dropdown-menu__option">
164
- <a id="student_login_button" class="button--regular" aria-labelledby="Student" href="{% url 'student_login_access_code' %}">
165
- <div class="dropdown-menu__option__text">Student</div>
166
- <span data-nosnippet class="material-icons-outlined">chevron_right</span>
167
- </a>
168
- </li>
169
- <li class="dropdown-menu__option">
170
- <a id="independent_login_button" class="button--regular" aria-labelledby="Independent" href="{% url 'independent_student_login' %}">
171
- <div class="dropdown-menu__option__text">Independent</div>
172
- <span data-nosnippet class="material-icons-outlined">chevron_right</span>
173
- </a>
174
- </li>
175
- </ul>
176
- </div>
177
- {% endif %}
150
+ {% else %}
151
+ <div class="menu__right-side col-md-5">
152
+ <a href="{% url 'register' %}" id="signup_button" class="button button--primary button--register register">Register</a>
153
+ <div class="dropdown">
154
+ <button id="login_dropdown" class="button--regular button--secondary button--header--login button--dropdown"
155
+ data-toggle="dropdown">
156
+ <div class="dropdown__text">Log in</div>
157
+ </button>
158
+ <ul class="dropdown-menu header__login-options-dropdown-menu">
159
+ <li class="dropdown-menu__option">
160
+ <a id="teacher_login_button" class="button--regular" aria-labelledby="Teacher" href="{% url 'teacher_login' %}">
161
+ <div class="dropdown-menu__option__text">Teacher</div>
162
+ <span data-nosnippet class="material-icons-outlined">chevron_right</span>
163
+ </a>
164
+ </li>
165
+ <li class="dropdown-menu__option">
166
+ <a id="student_login_button" class="button--regular" aria-labelledby="Student" href="{% url 'student_login_access_code' %}">
167
+ <div class="dropdown-menu__option__text">Student</div>
168
+ <span data-nosnippet class="material-icons-outlined">chevron_right</span>
169
+ </a>
170
+ </li>
171
+ <li class="dropdown-menu__option">
172
+ <a id="independent_login_button" class="button--regular" aria-labelledby="Independent" href="{% url 'independent_student_login' %}">
173
+ <div class="dropdown-menu__option__text">Independent</div>
174
+ <span data-nosnippet class="material-icons-outlined">chevron_right</span>
175
+ </a>
176
+ </li>
177
+ </ul>
178
+ </div>
179
+ {% endif %}
178
180
  </div>
179
181
  </div>
180
182
  <div id="menu-items" class="collapse">
@@ -239,6 +241,8 @@
239
241
  {% else %}
240
242
  <a class="button button--menu__item button--register"
241
243
  href="{% url 'register' %}">Register now</a>
244
+ <button onclick="showDonateConfirmation()"
245
+ class="button--menu__item button--donate">Donate</button>
242
246
  <button class="button--menu__item button--menu__item--sub-header login"
243
247
  data-toggle="collapse" data-target="#login-tabs">Log in</button>
244
248
  <div id="login-tabs" class="collapse">
@@ -10,6 +10,7 @@ from common.helpers.emails import (
10
10
  send_dotmailer_consent_confirmation_email_to_user,
11
11
  DotmailerUserType,
12
12
  )
13
+ from common.mail import address_book_ids
13
14
  from django.test import Client
14
15
  from django.urls import reverse
15
16
 
@@ -21,7 +22,6 @@ from example_project.portal_test_settings import (
21
22
  DOTMAILER_THANKS_FOR_STAYING_CAMPAIGN_ID,
22
23
  DOTMAILER_CREATE_CONTACT_URL,
23
24
  DOTMAILER_DELETE_USER_BY_ID_URL,
24
- DOTMAILER_MAIN_ADDRESS_BOOK_URL,
25
25
  DOTMAILER_TEACHER_ADDRESS_BOOK_URL,
26
26
  DOTMAILER_STUDENT_ADDRESS_BOOK_URL,
27
27
  DOTMAILER_NO_ACCOUNT_ADDRESS_BOOK_URL,
@@ -47,7 +47,11 @@ def test_newsletter_calls_correct_requests(mocker, monkeypatch):
47
47
  )
48
48
 
49
49
  add_to_dotmailer(
50
- "Ray", "Charles", "ray.charles@example.com", DotmailerUserType.TEACHER
50
+ "Ray",
51
+ "Charles",
52
+ "ray.charles@example.com",
53
+ address_book_ids["newsletter"],
54
+ DotmailerUserType.TEACHER,
51
55
  )
52
56
 
53
57
  mocked_create_contact.assert_called_once()
@@ -121,17 +125,15 @@ def test_newsletter_sends_correct_request_data(
121
125
  )
122
126
 
123
127
  add_contact_to_address_book(
124
- "Ray", "Charles", "ray.charles@example.com", DotmailerUserType.TEACHER
128
+ "Ray",
129
+ "Charles",
130
+ "ray.charles@example.com",
131
+ address_book_ids["newsletter"],
132
+ DotmailerUserType.TEACHER,
125
133
  )
126
134
 
127
135
  assert mocked_post.call_count == 3
128
136
 
129
- mocked_post.assert_any_call(
130
- DOTMAILER_MAIN_ADDRESS_BOOK_URL,
131
- auth=(DOTMAILER_USER, DOTMAILER_PASSWORD),
132
- json=expected_body2,
133
- )
134
-
135
137
  mocked_post.assert_any_call(
136
138
  DOTMAILER_TEACHER_ADDRESS_BOOK_URL,
137
139
  auth=(DOTMAILER_USER, DOTMAILER_PASSWORD),
@@ -141,17 +143,15 @@ def test_newsletter_sends_correct_request_data(
141
143
  mocked_post.reset_mock()
142
144
 
143
145
  add_contact_to_address_book(
144
- "Ray", "Charles", "ray.charles@example.com", DotmailerUserType.STUDENT
146
+ "Ray",
147
+ "Charles",
148
+ "ray.charles@example.com",
149
+ address_book_ids["newsletter"],
150
+ DotmailerUserType.STUDENT,
145
151
  )
146
152
 
147
153
  assert mocked_post.call_count == 2
148
154
 
149
- mocked_post.assert_any_call(
150
- DOTMAILER_MAIN_ADDRESS_BOOK_URL,
151
- auth=(DOTMAILER_USER, DOTMAILER_PASSWORD),
152
- json=expected_body2,
153
- )
154
-
155
155
  mocked_post.assert_any_call(
156
156
  DOTMAILER_STUDENT_ADDRESS_BOOK_URL,
157
157
  auth=(DOTMAILER_USER, DOTMAILER_PASSWORD),
@@ -164,17 +164,12 @@ def test_newsletter_sends_correct_request_data(
164
164
  "Ray",
165
165
  "Charles",
166
166
  "ray.charles@example.com",
167
+ address_book_ids["newsletter"],
167
168
  DotmailerUserType.NO_ACCOUNT,
168
169
  )
169
170
 
170
171
  assert mocked_post.call_count == 2
171
172
 
172
- mocked_post.assert_any_call(
173
- DOTMAILER_MAIN_ADDRESS_BOOK_URL,
174
- auth=(DOTMAILER_USER, DOTMAILER_PASSWORD),
175
- json=expected_body2,
176
- )
177
-
178
173
  mocked_post.assert_any_call(
179
174
  DOTMAILER_NO_ACCOUNT_ADDRESS_BOOK_URL,
180
175
  auth=(DOTMAILER_USER, DOTMAILER_PASSWORD),