codeforlife-portal 1.0.0.post.dev367__tar.gz → 1.0.0.post.dev373__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.
Files changed (683) hide show
  1. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/PKG-INFO +1 -1
  2. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/codeforlife_portal.egg-info/PKG-INFO +1 -1
  3. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/codeforlife_portal.egg-info/SOURCES.txt +2 -0
  4. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/_version.py +2 -2
  5. codeforlife-portal-1.0.0.post.dev373/portal/forms/play_new.py +137 -0
  6. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/forms/teach.py +7 -7
  7. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/forms/teach_new.py +11 -12
  8. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/passwordStrength_new.js +35 -32
  9. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/sass/styles.scss +5 -0
  10. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/materials/home.html +3 -3
  11. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach.html +6 -6
  12. codeforlife-portal-1.0.0.post.dev373/portal/templates/redesign/register.html +116 -0
  13. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/home_page_new.py +5 -0
  14. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/signup_page.py +30 -8
  15. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/dashboard_page_new.py +0 -2
  16. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach_page.py +2 -2
  17. codeforlife-portal-1.0.0.post.dev373/portal/tests/test_independent_student_new.py +57 -0
  18. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_organisation_new.py +0 -2
  19. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/utils/student_new.py +34 -0
  20. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/views/email_new.py +1 -1
  21. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/views/home.py +1 -1
  22. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/views/home_new.py +38 -13
  23. codeforlife-portal-1.0.0.post.dev367/portal/templates/redesign/register.html +0 -94
  24. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/MANIFEST.in +0 -0
  25. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/README.md +0 -0
  26. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/codeforlife_portal.egg-info/dependency_links.txt +0 -0
  27. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/codeforlife_portal.egg-info/not-zip-safe +0 -0
  28. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/codeforlife_portal.egg-info/requires.txt +0 -0
  29. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/codeforlife_portal.egg-info/top_level.txt +0 -0
  30. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/deploy/__init__.py +0 -0
  31. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/deploy/captcha.py +0 -0
  32. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/deploy/mail.py +0 -0
  33. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/deploy/middleware/__init__.py +0 -0
  34. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/deploy/middleware/basicauth.py +0 -0
  35. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/deploy/middleware/exceptionlogging.py +0 -0
  36. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/deploy/permissions.py +0 -0
  37. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/deploy/static/apple-touch-icon-120x120.png +0 -0
  38. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/deploy/static/apple-touch-icon-152x152.png +0 -0
  39. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/deploy/static/apple-touch-icon-180x180.png +0 -0
  40. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/deploy/static/apple-touch-icon-76x76.png +0 -0
  41. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/deploy/static/apple-touch-icon.png +0 -0
  42. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/deploy/static/robots.txt +0 -0
  43. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/deploy/templates/deploy/csrf_failure.html +0 -0
  44. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/deploy/views.py +0 -0
  45. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/example_project/__init__.py +0 -0
  46. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/example_project/example_project/__init__.py +0 -0
  47. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/example_project/example_project/settings.py +0 -0
  48. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/example_project/example_project/wsgi.py +0 -0
  49. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/example_project/manage.py +0 -0
  50. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/__init__.py +0 -0
  51. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/admin.py +0 -0
  52. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/app_settings.py +0 -0
  53. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/autoconfig.py +0 -0
  54. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/beta.py +0 -0
  55. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/emailMessages.py +0 -0
  56. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/emailMessages_new.py +0 -0
  57. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/forms/__init__.py +0 -0
  58. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/forms/admin_login.py +0 -0
  59. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/forms/auth_forms.py +0 -0
  60. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/forms/home.py +0 -0
  61. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/forms/organisation.py +0 -0
  62. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/forms/play.py +0 -0
  63. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/forms/registration.py +0 -0
  64. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/handlers.py +0 -0
  65. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/helpers/__init__.py +0 -0
  66. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/helpers/emails.py +0 -0
  67. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/helpers/emails_new.py +0 -0
  68. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/helpers/generators.py +0 -0
  69. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/helpers/location.py +0 -0
  70. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/helpers/password.py +0 -0
  71. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/middleware/__init__.py +0 -0
  72. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/middleware/ratelimit_login_attempts.py +0 -0
  73. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/migrations/0001_squashed_0041_new_news.py +0 -0
  74. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/migrations/0042_school_country.py +0 -0
  75. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/migrations/0043_auto_20150430_0952.py +0 -0
  76. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/migrations/0044_auto_20150430_0959.py +0 -0
  77. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/migrations/0045_auto_20150430_1446.py +0 -0
  78. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/migrations/0046_auto_20150723_1101.py +0 -0
  79. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/migrations/0047_remove_userprofile_avatar.py +0 -0
  80. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/migrations/0048_plural_management_frontnews.py +0 -0
  81. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/migrations/0049_refactor_emailverifications.py +0 -0
  82. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/migrations/0050_refactor_emailverifications_2.py +0 -0
  83. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/migrations/0051_add_missing_ev_records.py +0 -0
  84. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/migrations/0052_refactor_emailverifications_3.py +0 -0
  85. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/migrations/0053_refactor_teacher_student_1.py +0 -0
  86. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/migrations/__init__.py +0 -0
  87. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/models.py +0 -0
  88. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/permissions.py +0 -0
  89. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/email_media/logo_c4l_hexa.png +0 -0
  90. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/colorbox.css +0 -0
  91. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/common.css +0 -0
  92. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/images/KS-level-sprite.png +0 -0
  93. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/images/Menu-arrow-down.png +0 -0
  94. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/images/animated-overlay.gif +0 -0
  95. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  96. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  97. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/images/ui-bg_flat_10_000000_40x100.png +0 -0
  98. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  99. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  100. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  101. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  102. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  103. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  104. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/images/ui-icons_222222_256x240.png +0 -0
  105. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/images/ui-icons_228ef1_256x240.png +0 -0
  106. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/images/ui-icons_ef8c08_256x240.png +0 -0
  107. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/images/ui-icons_ffd27a_256x240.png +0 -0
  108. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/images/ui-icons_ffffff_256x240.png +0 -0
  109. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/jquery-ui.css +0 -0
  110. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/jquery-ui.structure.css +0 -0
  111. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/jquery-ui.theme.css +0 -0
  112. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/list.css +0 -0
  113. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/materials.css +0 -0
  114. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/noJS.css +0 -0
  115. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/reset.css +0 -0
  116. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/solution_selection.css +0 -0
  117. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/styles.css +0 -0
  118. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/css/tables.css +0 -0
  119. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/fonts/glyphicons-halflings-regular.eot +0 -0
  120. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/fonts/glyphicons-halflings-regular.svg +0 -0
  121. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/fonts/glyphicons-halflings-regular.ttf +0 -0
  122. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/fonts/glyphicons-halflings-regular.woff +0 -0
  123. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/fonts/glyphicons-halflings-regular.woff2 +0 -0
  124. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/2fa_authenticator_link.png +0 -0
  125. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/RR_logo_blank.png +0 -0
  126. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/RRlogo_on_green.png +0 -0
  127. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/RRlogo_on_green_small.png +0 -0
  128. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/RRlogo_on_less_green.png +0 -0
  129. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/RRlogo_on_less_green_small.png +0 -0
  130. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/colorboxImages/border.png +0 -0
  131. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/colorboxImages/controls.png +0 -0
  132. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/colorboxImages/loading.gif +0 -0
  133. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/colorboxImages/loading_background.png +0 -0
  134. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/colorboxImages/overlay.png +0 -0
  135. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/dee_hi_res.png +0 -0
  136. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/dee_large.png +0 -0
  137. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/dee_red_box.png +0 -0
  138. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/favicon.ico +0 -0
  139. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/kirsty.png +0 -0
  140. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/kirsty_hi_res.png +0 -0
  141. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/kirsty_large.png +0 -0
  142. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_001.png +0 -0
  143. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_002.png +0 -0
  144. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_003.png +0 -0
  145. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_004.png +0 -0
  146. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_005.png +0 -0
  147. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_006.png +0 -0
  148. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_007.png +0 -0
  149. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_008.png +0 -0
  150. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_009.png +0 -0
  151. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_010.png +0 -0
  152. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_011.png +0 -0
  153. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_012.png +0 -0
  154. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_013.png +0 -0
  155. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_014.png +0 -0
  156. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_015.png +0 -0
  157. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_016.png +0 -0
  158. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_017.png +0 -0
  159. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_018.png +0 -0
  160. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_019.png +0 -0
  161. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_020.png +0 -0
  162. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_021.png +0 -0
  163. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_022.png +0 -0
  164. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_023.png +0 -0
  165. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_024.png +0 -0
  166. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_025.png +0 -0
  167. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_026.png +0 -0
  168. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_027.png +0 -0
  169. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_028.png +0 -0
  170. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_029.png +0 -0
  171. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_030.png +0 -0
  172. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_031.png +0 -0
  173. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_032.png +0 -0
  174. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_033.png +0 -0
  175. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_034.png +0 -0
  176. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_035.png +0 -0
  177. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_036.png +0 -0
  178. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_037.png +0 -0
  179. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_038.png +0 -0
  180. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_039.png +0 -0
  181. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_040.png +0 -0
  182. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_041.png +0 -0
  183. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_042.png +0 -0
  184. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_043.png +0 -0
  185. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_044.png +0 -0
  186. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_045.png +0 -0
  187. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_046.png +0 -0
  188. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_047.png +0 -0
  189. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_048.png +0 -0
  190. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_049.png +0 -0
  191. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_050.png +0 -0
  192. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_051.png +0 -0
  193. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_052.png +0 -0
  194. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_053.png +0 -0
  195. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_054.png +0 -0
  196. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_055.png +0 -0
  197. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_056.png +0 -0
  198. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_057.png +0 -0
  199. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_058.png +0 -0
  200. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_059.png +0 -0
  201. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_060.png +0 -0
  202. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_061.png +0 -0
  203. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_062.png +0 -0
  204. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_063.png +0 -0
  205. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_064.png +0 -0
  206. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_065.png +0 -0
  207. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_066.png +0 -0
  208. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_067.png +0 -0
  209. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_068.png +0 -0
  210. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_069.png +0 -0
  211. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_070.png +0 -0
  212. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_071.png +0 -0
  213. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_072.png +0 -0
  214. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_073.png +0 -0
  215. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_074.png +0 -0
  216. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_075.png +0 -0
  217. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_076.png +0 -0
  218. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_077.png +0 -0
  219. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_078.png +0 -0
  220. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_079.png +0 -0
  221. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_080.png +0 -0
  222. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_081.png +0 -0
  223. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_082.png +0 -0
  224. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_083.png +0 -0
  225. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_084.png +0 -0
  226. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_085.png +0 -0
  227. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_086.png +0 -0
  228. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_087.png +0 -0
  229. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_088.png +0 -0
  230. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_089.png +0 -0
  231. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_090.png +0 -0
  232. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_091.png +0 -0
  233. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_092.png +0 -0
  234. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_093.png +0 -0
  235. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_094.png +0 -0
  236. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_095.png +0 -0
  237. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_096.png +0 -0
  238. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_097.png +0 -0
  239. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_098.png +0 -0
  240. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_099.png +0 -0
  241. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_100.png +0 -0
  242. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_101.png +0 -0
  243. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_102.png +0 -0
  244. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_103.png +0 -0
  245. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_104.png +0 -0
  246. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_105.png +0 -0
  247. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_106.png +0 -0
  248. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_107.png +0 -0
  249. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_108.png +0 -0
  250. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/levels/level_109.png +0 -0
  251. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/logged_in_blob.png +0 -0
  252. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/logged_out_blob.png +0 -0
  253. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/logo_c4l_horizontal.png +0 -0
  254. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/movie_file.png +0 -0
  255. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/nigel.png +0 -0
  256. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/nigel_hi_res.png +0 -0
  257. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/nigel_large.png +0 -0
  258. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/padlock.png +0 -0
  259. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/pdfsmall.png +0 -0
  260. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/phil.png +0 -0
  261. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/phil_hi_res.png +0 -0
  262. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/phil_large.png +0 -0
  263. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/qr_code_scan.png +0 -0
  264. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/rrBG.jpg +0 -0
  265. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/rrBGIE.jpg +0 -0
  266. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/rrBGsmall.jpg +0 -0
  267. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solutionPY_080.png +0 -0
  268. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solutionPY_081.png +0 -0
  269. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solutionPY_082.png +0 -0
  270. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solutionPY_083.png +0 -0
  271. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solutionPY_084.png +0 -0
  272. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solutionPY_085.png +0 -0
  273. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solutionPY_086.png +0 -0
  274. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solutionPY_087.png +0 -0
  275. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solutionPY_088.png +0 -0
  276. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solutionPY_089.png +0 -0
  277. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solutionPY_090.png +0 -0
  278. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solutionPY_091.png +0 -0
  279. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_001.png +0 -0
  280. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_002.png +0 -0
  281. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_003.png +0 -0
  282. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_004.png +0 -0
  283. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_005.png +0 -0
  284. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_006.png +0 -0
  285. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_007.png +0 -0
  286. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_008.png +0 -0
  287. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_009.png +0 -0
  288. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_010.png +0 -0
  289. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_011.png +0 -0
  290. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_012.png +0 -0
  291. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_013.png +0 -0
  292. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_014.png +0 -0
  293. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_015.png +0 -0
  294. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_016.png +0 -0
  295. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_017.png +0 -0
  296. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_018.png +0 -0
  297. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_019.png +0 -0
  298. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_020.png +0 -0
  299. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_021.png +0 -0
  300. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_022.png +0 -0
  301. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_023.png +0 -0
  302. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_024.png +0 -0
  303. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_025.png +0 -0
  304. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_026.png +0 -0
  305. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_027.png +0 -0
  306. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_028.png +0 -0
  307. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_029.png +0 -0
  308. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_030.png +0 -0
  309. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_031.png +0 -0
  310. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_032.png +0 -0
  311. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_033.png +0 -0
  312. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_034.png +0 -0
  313. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_035.png +0 -0
  314. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_036.png +0 -0
  315. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_037.png +0 -0
  316. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_038.png +0 -0
  317. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_039.png +0 -0
  318. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_040.png +0 -0
  319. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_041.png +0 -0
  320. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_042.png +0 -0
  321. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_043.png +0 -0
  322. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_044.png +0 -0
  323. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_045.png +0 -0
  324. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_046.png +0 -0
  325. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_047.png +0 -0
  326. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_048.png +0 -0
  327. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_049.png +0 -0
  328. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_050.png +0 -0
  329. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_051.png +0 -0
  330. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_052.png +0 -0
  331. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_053.png +0 -0
  332. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_054.png +0 -0
  333. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_055.png +0 -0
  334. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_056.png +0 -0
  335. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_057.png +0 -0
  336. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_058.png +0 -0
  337. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_059.png +0 -0
  338. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_060.png +0 -0
  339. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_061.png +0 -0
  340. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_062.png +0 -0
  341. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_063.png +0 -0
  342. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_064.png +0 -0
  343. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_065.png +0 -0
  344. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_066.png +0 -0
  345. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_067.png +0 -0
  346. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_068.png +0 -0
  347. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_069.png +0 -0
  348. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_070.png +0 -0
  349. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_071.png +0 -0
  350. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_072.png +0 -0
  351. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_073.png +0 -0
  352. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_074.png +0 -0
  353. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_075.png +0 -0
  354. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_076.png +0 -0
  355. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_077.png +0 -0
  356. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_078.png +0 -0
  357. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_079.png +0 -0
  358. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_080.png +0 -0
  359. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_081.png +0 -0
  360. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_082.png +0 -0
  361. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_083.png +0 -0
  362. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_084.png +0 -0
  363. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_085.png +0 -0
  364. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_086.png +0 -0
  365. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_087.png +0 -0
  366. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_088.png +0 -0
  367. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_089.png +0 -0
  368. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_090.png +0 -0
  369. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_091.png +0 -0
  370. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_092.png +0 -0
  371. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_093.png +0 -0
  372. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_094.png +0 -0
  373. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_095.png +0 -0
  374. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_096.png +0 -0
  375. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_097.png +0 -0
  376. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_098.png +0 -0
  377. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_099.png +0 -0
  378. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_100.png +0 -0
  379. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_101.png +0 -0
  380. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_102.png +0 -0
  381. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_103.png +0 -0
  382. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_104.png +0 -0
  383. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_105.png +0 -0
  384. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_106.png +0 -0
  385. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_107.png +0 -0
  386. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_108.png +0 -0
  387. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/solutions/solution_109.png +0 -0
  388. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/video_still.png +0 -0
  389. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/wes.png +0 -0
  390. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/wes_hi_res.png +0 -0
  391. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/wes_large.png +0 -0
  392. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img/zip.png +0 -0
  393. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/10x_logo.png +0 -0
  394. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/a_fun_game_for_students.jpg +0 -0
  395. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/about_blockly.png +0 -0
  396. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/about_us_hero.jpg +0 -0
  397. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/background_blue.png +0 -0
  398. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/background_orange.png +0 -0
  399. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/barefoot_logo.png +0 -0
  400. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/bcs_logo.png +0 -0
  401. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/cross.png +0 -0
  402. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/dee.png +0 -0
  403. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/facebook.png +0 -0
  404. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/footer_arrow.png +0 -0
  405. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/form_chooser_arrow.png +0 -0
  406. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/gla_logo.png +0 -0
  407. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/google+.png +0 -0
  408. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/hamburger.png +0 -0
  409. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/help_and_support_hero.jpg +0 -0
  410. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/home_educate_hero.jpg +0 -0
  411. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/home_play_hero.jpg +0 -0
  412. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/hope_logo.png +0 -0
  413. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/icl_logo.png +0 -0
  414. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/icon_13.png +0 -0
  415. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/icon_free.png +0 -0
  416. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/icon_game.png +0 -0
  417. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/icon_globe.png +0 -0
  418. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/icon_graph.png +0 -0
  419. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/icon_laptop.png +0 -0
  420. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/icon_steps.png +0 -0
  421. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/kirsty.png +0 -0
  422. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/logo_c4l_hexa.png +0 -0
  423. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/logo_c4l_horizontal.png +0 -0
  424. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/logo_ocado.png +0 -0
  425. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/logout_icon.png +0 -0
  426. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/mc_saatchi_logo.png +0 -0
  427. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/nigel.png +0 -0
  428. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/paper_plane.png +0 -0
  429. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/phil.png +0 -0
  430. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/play_button.png +0 -0
  431. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/pressure_cooker_logo.png +0 -0
  432. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/rapid_router.png +0 -0
  433. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/rapid_router_background.jpg +0 -0
  434. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/rapid_router_landing_hero.png +0 -0
  435. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/resources_image.png +0 -0
  436. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/sadface.png +0 -0
  437. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/sharon_harrison.jpg +0 -0
  438. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/stage_icon_ks1.png +0 -0
  439. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/stage_icon_lks2.png +0 -0
  440. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/stage_icon_uks2.png +0 -0
  441. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/step_done.png +0 -0
  442. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/step_in_progress.png +0 -0
  443. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/step_undone.png +0 -0
  444. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/teacher1.png +0 -0
  445. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/teacher2.png +0 -0
  446. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/teacher3.png +0 -0
  447. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/teacher_dashboard.png +0 -0
  448. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/teaching_resources.jpg +0 -0
  449. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/teaching_tools.jpg +0 -0
  450. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/thumbnail_intro_c4l.jpg +0 -0
  451. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/thumbnail_intro_rr.jpg +0 -0
  452. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/twitter.png +0 -0
  453. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/warning.png +0 -0
  454. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/wes.png +0 -0
  455. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/img_new/zip.png +0 -0
  456. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/bootstrap.js +0 -0
  457. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/common.js +0 -0
  458. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/deleteWorkspaces.js +0 -0
  459. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/fuzzySchoolLookup.js +0 -0
  460. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/jquery.placeholder.js +0 -0
  461. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/lib/jquery-ui.js +0 -0
  462. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/lib/jquery-video-lightning.js +0 -0
  463. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/lib/jquery.colorbox.js +0 -0
  464. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/lib/jquery.easy-ticker.js +0 -0
  465. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/lib/jquery.js +0 -0
  466. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/lib/magnific.js +0 -0
  467. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/lib/modernizr.custom.79639.js +0 -0
  468. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/organisation_manage.js +0 -0
  469. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/passwordStrength.js +0 -0
  470. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/play.js +0 -0
  471. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/riveted.min.js +0 -0
  472. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/solutionSelection.js +0 -0
  473. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/teach_browser.js +0 -0
  474. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/js/teach_class.js +0 -0
  475. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/sass/bootstrap.scss +0 -0
  476. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/static/portal/sass/colorbox.scss +0 -0
  477. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/403.html +0 -0
  478. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/404.html +0 -0
  479. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/500.html +0 -0
  480. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/email.html +0 -0
  481. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/email.txt +0 -0
  482. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/2FA_redirect.html +0 -0
  483. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/about.html +0 -0
  484. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/admin/aggregated_data.html +0 -0
  485. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/admin/map.html +0 -0
  486. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/base.html +0 -0
  487. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/base_no_userprofile.html +0 -0
  488. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/contact.html +0 -0
  489. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/email_verification_failed.html +0 -0
  490. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/email_verification_needed.html +0 -0
  491. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/help-and-support.html +0 -0
  492. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/home.html +0 -0
  493. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/locked_out.html +0 -0
  494. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/mouseflow.html +0 -0
  495. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/play/base.html +0 -0
  496. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/play/student_details.html +0 -0
  497. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/play/student_edit_account.html +0 -0
  498. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/play/student_join_organisation.html +0 -0
  499. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/play.html +0 -0
  500. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/base.html +0 -0
  501. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/materials/base.html +0 -0
  502. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/materials/viewer.html +0 -0
  503. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/organisation_create.html +0 -0
  504. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/organisation_manage.html +0 -0
  505. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_add_external_student.html +0 -0
  506. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_added_external_student.html +0 -0
  507. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_class.html +0 -0
  508. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_classes.html +0 -0
  509. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_dismiss_students.html +0 -0
  510. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_edit_account.html +0 -0
  511. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_edit_class.html +0 -0
  512. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_edit_student.html +0 -0
  513. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_home.html +0 -0
  514. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_lesson_plans.html +0 -0
  515. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_lesson_plans_python.html +0 -0
  516. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_level_solutions.html +0 -0
  517. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_move_all_classes.html +0 -0
  518. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_move_class.html +0 -0
  519. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_move_students.html +0 -0
  520. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_move_students_to_class.html +0 -0
  521. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_new_students.html +0 -0
  522. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_solution.html +0 -0
  523. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_solutionPY.html +0 -0
  524. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_student_reset.html +0 -0
  525. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/teach/teacher_students_reset.html +0 -0
  526. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/portal/terms.html +0 -0
  527. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/about_new.html +0 -0
  528. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/base_new.html +0 -0
  529. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/email_verification_failed_new.html +0 -0
  530. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/email_verification_needed_new.html +0 -0
  531. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/help-and-support_new.html +0 -0
  532. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/home_new.html +0 -0
  533. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/login.html +0 -0
  534. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/play_new.html +0 -0
  535. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/teach_new/base_class_edit.html +0 -0
  536. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/teach_new/base_logged_in.html +0 -0
  537. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/teach_new/base_registering.html +0 -0
  538. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/teach_new/class_new.html +0 -0
  539. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/teach_new/dashboard.html +0 -0
  540. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/teach_new/materials_new.html +0 -0
  541. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/teach_new/onboarding_classes.html +0 -0
  542. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/teach_new/onboarding_complete.html +0 -0
  543. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/teach_new/onboarding_join_pending.html +0 -0
  544. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/teach_new/onboarding_print.html +0 -0
  545. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/teach_new/onboarding_school.html +0 -0
  546. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/teach_new/onboarding_students.html +0 -0
  547. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/teach_new/viewer_new.html +0 -0
  548. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/teach_new.html +0 -0
  549. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/redesign/terms_new.html +0 -0
  550. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/registration/login.html +0 -0
  551. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/registration/password_reset_complete.html +0 -0
  552. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/registration/password_reset_confirm.html +0 -0
  553. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/registration/password_reset_done.html +0 -0
  554. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/registration/password_reset_email.html +0 -0
  555. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/registration/student_password_reset_form.html +0 -0
  556. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/registration/teacher_password_reset_form.html +0 -0
  557. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/two_factor/_base.html +0 -0
  558. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/two_factor/core/setup_complete.html +0 -0
  559. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templates/two_factor/profile/profile.html +0 -0
  560. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templatetags/__init__.py +0 -0
  561. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templatetags/app_tags.py +0 -0
  562. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/templatetags/table_tags.py +0 -0
  563. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/__init__.py +0 -0
  564. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/base_test.py +0 -0
  565. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/base_test_migration.py +0 -0
  566. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/base_test_new.py +0 -0
  567. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/custom_handler.py +0 -0
  568. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/__init__.py +0 -0
  569. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/__init__.py +0 -0
  570. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/about_page.py +0 -0
  571. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/admin/__init__.py +0 -0
  572. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/admin/admin_base_page.py +0 -0
  573. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/admin/admin_data_page.py +0 -0
  574. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/admin/admin_login_page.py +0 -0
  575. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/admin/admin_map_page.py +0 -0
  576. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/base_page.py +0 -0
  577. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/contact_page.py +0 -0
  578. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/email_verification_needed_page.py +0 -0
  579. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/email_verification_needed_page_new.py +0 -0
  580. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/forbidden_page.py +0 -0
  581. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/game_page.py +0 -0
  582. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/help_and_support_page.py +0 -0
  583. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/home_page.py +0 -0
  584. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/login_page.py +0 -0
  585. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/pdf_viewer_page.py +0 -0
  586. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/play/__init__.py +0 -0
  587. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/play/account_page.py +0 -0
  588. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/play/dashboard_page.py +0 -0
  589. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/play/join_school_or_club_page.py +0 -0
  590. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/play/play_base_page.py +0 -0
  591. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/play_page.py +0 -0
  592. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/resources_page.py +0 -0
  593. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/__init__.py +0 -0
  594. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/account_page.py +0 -0
  595. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/add_independent_student_to_class_page.py +0 -0
  596. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/added_independent_student_to_class_page.py +0 -0
  597. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/class_page.py +0 -0
  598. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/class_settings_page.py +0 -0
  599. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/classes_page.py +0 -0
  600. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/dashboard_page.py +0 -0
  601. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/dismiss_students_page.py +0 -0
  602. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/move_class_page.py +0 -0
  603. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/move_students_disambiguate_page.py +0 -0
  604. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/move_students_page.py +0 -0
  605. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/new_students_page.py +0 -0
  606. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/onboarding_classes_page.py +0 -0
  607. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/onboarding_organisation_page.py +0 -0
  608. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/onboarding_revoke_request_page.py +0 -0
  609. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/onboarding_student_list_page.py +0 -0
  610. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/onboarding_students_page.py +0 -0
  611. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/organisation_create_page.py +0 -0
  612. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/organisation_manage_page.py +0 -0
  613. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/organisation_revoke_page.py +0 -0
  614. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/teach_base_page.py +0 -0
  615. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/teach_base_page_new.py +0 -0
  616. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/teach/thanks_for_reset_page.py +0 -0
  617. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/portal/terms_page.py +0 -0
  618. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/registration/__init__.py +0 -0
  619. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/registration/independent_student_login_form_page.py +0 -0
  620. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/registration/password_reset_form_page.py +0 -0
  621. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/registration/student_password_reset_form_page.py +0 -0
  622. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/pageObjects/registration/teacher_password_reset_form_page.py +0 -0
  623. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_admin.py +0 -0
  624. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_class.py +0 -0
  625. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_class_new.py +0 -0
  626. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_emails.py +0 -0
  627. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_independent_student.py +0 -0
  628. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_independent_student_joins_a_class.py +0 -0
  629. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_location.py +0 -0
  630. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_navigation.py +0 -0
  631. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_organisation.py +0 -0
  632. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_school_student.py +0 -0
  633. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_school_student_new.py +0 -0
  634. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_security.py +0 -0
  635. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_teacher.py +0 -0
  636. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_teacher_new.py +0 -0
  637. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_teacher_student.py +0 -0
  638. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_teacher_student_new.py +0 -0
  639. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_views.py +0 -0
  640. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/test_views_new.py +0 -0
  641. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/utils/__init__.py +0 -0
  642. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/utils/classes.py +0 -0
  643. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/utils/classes_new.py +0 -0
  644. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/utils/email.py +0 -0
  645. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/utils/messages.py +0 -0
  646. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/utils/organisation.py +0 -0
  647. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/utils/organisation_new.py +0 -0
  648. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/utils/student.py +0 -0
  649. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/utils/teacher.py +0 -0
  650. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/tests/utils/teacher_new.py +0 -0
  651. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/urls.py +0 -0
  652. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/utils.py +0 -0
  653. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/views/__init__.py +0 -0
  654. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/views/admin.py +0 -0
  655. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/views/email.py +0 -0
  656. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/views/organisation.py +0 -0
  657. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/views/organisation_new.py +0 -0
  658. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/views/play.py +0 -0
  659. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/views/registration.py +0 -0
  660. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/views/teacher/__init__.py +0 -0
  661. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/views/teacher/dashboard.py +0 -0
  662. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/views/teacher/home.py +0 -0
  663. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/views/teacher/pdfs.py +0 -0
  664. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/views/teacher/solutions_level_selector.py +0 -0
  665. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/views/teacher/teach.py +0 -0
  666. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/views/teacher/teach_new.py +0 -0
  667. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/portal/wsgi.py +0 -0
  668. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/ratelimit/__init__.py +0 -0
  669. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/ratelimit/backends/__init__.py +0 -0
  670. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/ratelimit/backends/cache.py +0 -0
  671. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/ratelimit/decorators.py +0 -0
  672. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/reports/__init__.py +0 -0
  673. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/reports/admin.py +0 -0
  674. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/reports/migrations/0001_initial.py +0 -0
  675. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/reports/migrations/0002_hitsperlevelperday.py +0 -0
  676. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/reports/migrations/__init__.py +0 -0
  677. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/reports/models.py +0 -0
  678. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/reports/tests.py +0 -0
  679. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/reports/urls.py +0 -0
  680. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/reports/views.py +0 -0
  681. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/setup.cfg +0 -0
  682. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/setup.py +0 -0
  683. {codeforlife-portal-1.0.0.post.dev367 → codeforlife-portal-1.0.0.post.dev373}/versioneer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.0
2
2
  Name: codeforlife-portal
3
- Version: 1.0.0.post.dev367
3
+ Version: 1.0.0.post.dev373
4
4
  Summary: UNKNOWN
5
5
  Home-page: UNKNOWN
6
6
  Author: UNKNOWN
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.0
2
2
  Name: codeforlife-portal
3
- Version: 1.0.0.post0.dev367
3
+ Version: 1.0.0.post0.dev373
4
4
  Summary: UNKNOWN
5
5
  Home-page: UNKNOWN
6
6
  Author: UNKNOWN
@@ -49,6 +49,7 @@ portal/forms/auth_forms.py
49
49
  portal/forms/home.py
50
50
  portal/forms/organisation.py
51
51
  portal/forms/play.py
52
+ portal/forms/play_new.py
52
53
  portal/forms/registration.py
53
54
  portal/forms/teach.py
54
55
  portal/forms/teach_new.py
@@ -564,6 +565,7 @@ portal/tests/test_class_new.py
564
565
  portal/tests/test_emails.py
565
566
  portal/tests/test_independent_student.py
566
567
  portal/tests/test_independent_student_joins_a_class.py
568
+ portal/tests/test_independent_student_new.py
567
569
  portal/tests/test_location.py
568
570
  portal/tests/test_navigation.py
569
571
  portal/tests/test_organisation.py
@@ -11,8 +11,8 @@ version_json = '''
11
11
  {
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "cd26bac67c4aabda0b06ddf7a1aec4d8ac0dfdaa",
15
- "version": "1.0.0.post.dev367"
14
+ "full-revisionid": "5e1af72fbe38cce9f86d4d65bf05688ebcecc2d2",
15
+ "version": "1.0.0.post.dev373"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -0,0 +1,137 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Code for Life
3
+ #
4
+ # Copyright (C) 2016, Ocado Innovation Limited
5
+ #
6
+ # This program is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU Affero General Public License as
8
+ # published by the Free Software Foundation, either version 3 of the
9
+ # License, or (at your option) any later version.
10
+ #
11
+ # This program is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU Affero General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU Affero General Public License
17
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
18
+ #
19
+ # ADDITIONAL TERMS – Section 7 GNU General Public Licence
20
+ #
21
+ # This licence does not grant any right, title or interest in any “Ocado” logos,
22
+ # trade names or the trademark “Ocado” or any other trademarks or domain names
23
+ # owned by Ocado Innovation Limited or the Ocado group of companies or any other
24
+ # distinctive brand features of “Ocado” as may be secured from time to time. You
25
+ # must not distribute any modification of this program using the trademark
26
+ # “Ocado” or claim any affiliation or association with Ocado or its employees.
27
+ #
28
+ # You are not authorised to use the name Ocado (or any of its trade names) or
29
+ # the names of any author or contributor in advertising or for publicity purposes
30
+ # pertaining to the distribution of this program, without the prior written
31
+ # authorisation of Ocado.
32
+ #
33
+ # Any propagation, distribution or conveyance of this program must include this
34
+ # copyright notice and these terms. You must not misrepresent the origins of this
35
+ # program; modified versions of the program must be marked as such and not
36
+ # identified as the original program.
37
+ from datetime import timedelta
38
+
39
+ from django import forms
40
+ from django.contrib.auth import authenticate
41
+ from django.contrib.auth.models import User
42
+ from django.utils import timezone
43
+
44
+ from portal.models import Student, Class, stripStudentName
45
+ from portal.helpers.password import password_strength_test
46
+
47
+
48
+ class StudentLoginForm(forms.Form):
49
+ name = forms.CharField(
50
+ label='Name',
51
+ widget=forms.TextInput(attrs={'placeholder': "Jane"}))
52
+ access_code = forms.CharField(
53
+ label='Class Access Code',
54
+ widget=forms.TextInput(attrs={'placeholder': "AB123"}))
55
+ password = forms.CharField(
56
+ label='Password',
57
+ widget=forms.PasswordInput)
58
+
59
+ def clean(self):
60
+ if self.has_error('recaptcha'):
61
+ raise forms.ValidationError("Invalid name, class access code, password or captcha")
62
+
63
+ name = self.cleaned_data.get('name', None)
64
+ access_code = self.cleaned_data.get('access_code', None)
65
+ password = self.cleaned_data.get('password', None)
66
+
67
+ if name and access_code and password:
68
+
69
+ student, user = self.check_for_errors(name, access_code, password)
70
+
71
+ self.student = student
72
+ self.user = user
73
+
74
+ return self.cleaned_data
75
+
76
+ def check_for_errors(self, name, access_code, password):
77
+ classes = Class.objects.filter(access_code__iexact=access_code)
78
+ if len(classes) != 1:
79
+ raise forms.ValidationError("Invalid name, class access code or password")
80
+
81
+ name = stripStudentName(name)
82
+
83
+ students = Student.objects.filter(new_user__first_name__iexact=name, class_field=classes[0])
84
+ if len(students) != 1:
85
+ raise forms.ValidationError("Invalid name, class access code or password")
86
+
87
+ student = students[0]
88
+ user = authenticate(username=student.new_user.username, password=password)
89
+
90
+ if user is None:
91
+ raise forms.ValidationError("Invalid name, class access code or password")
92
+ if not user.is_active:
93
+ raise forms.ValidationError("This user account has been deactivated")
94
+
95
+ return student, user
96
+
97
+
98
+ class StudentSignupForm(forms.Form):
99
+ name = forms.CharField(
100
+ label='Name', max_length=100,
101
+ widget=forms.TextInput(attrs={'placeholder': "Rosalind Franklin"}))
102
+ username = forms.CharField(
103
+ label='Username', max_length=100,
104
+ widget=forms.TextInput(attrs={'placeholder': "rosie_f"}))
105
+ email = forms.EmailField(
106
+ label='Email address',
107
+ widget=forms.EmailInput(attrs={'placeholder': "rosalind.franklin@cambridge.ac.uk"}))
108
+ password = forms.CharField(
109
+ label='Password',
110
+ widget=forms.PasswordInput)
111
+ confirm_password = forms.CharField(
112
+ label='Confirm Password',
113
+ widget=forms.PasswordInput)
114
+
115
+ def clean_username(self):
116
+ username = self.cleaned_data.get('username', None)
117
+ if User.objects.filter(username=username).exists():
118
+ raise forms.ValidationError("That username is already in use")
119
+
120
+ return username
121
+
122
+ def clean_password(self):
123
+ password = self.cleaned_data.get('password', None)
124
+
125
+ if password and not password_strength_test(password, length=6, upper=False, lower=False, numbers=False):
126
+ raise forms.ValidationError("Password not strong enough, consider using at least 6 characters")
127
+
128
+ return password
129
+
130
+ def clean(self):
131
+ password = self.cleaned_data.get('password', None)
132
+ confirm_password = self.cleaned_data.get('confirm_password', None)
133
+
134
+ if password and confirm_password and password != confirm_password:
135
+ raise forms.ValidationError("Your passwords do not match")
136
+
137
+ return self.cleaned_data
@@ -191,10 +191,10 @@ class TeacherEditAccountForm(forms.Form):
191
191
 
192
192
 
193
193
  class TeacherLoginForm(forms.Form):
194
- email = forms.EmailField(
194
+ teacher_email = forms.EmailField(
195
195
  label='Email address',
196
196
  widget=forms.EmailInput(attrs={'placeholder': "my.email@address.com"}))
197
- password = forms.CharField(
197
+ teacher_password = forms.CharField(
198
198
  label='Password',
199
199
  widget=forms.PasswordInput)
200
200
 
@@ -202,11 +202,11 @@ class TeacherLoginForm(forms.Form):
202
202
  if self.has_error('recaptcha'):
203
203
  raise forms.ValidationError('Incorrect email address, password or captcha')
204
204
 
205
- email = self.cleaned_data.get('email', None)
206
- password = self.cleaned_data.get('password', None)
205
+ teacher_email = self.cleaned_data.get('teacher_email', None)
206
+ teacher_password = self.cleaned_data.get('teacher_password', None)
207
207
 
208
- if email and password:
209
- users = User.objects.filter(email=email)
208
+ if teacher_email and teacher_password:
209
+ users = User.objects.filter(email=teacher_email)
210
210
 
211
211
  # Check it's a teacher and not a student using the same email address
212
212
  user = None
@@ -218,7 +218,7 @@ class TeacherLoginForm(forms.Form):
218
218
  if user is None:
219
219
  raise forms.ValidationError('Incorrect email address or password')
220
220
 
221
- user = authenticate(username=user.username, password=password)
221
+ user = authenticate(username=user.username, password=teacher_password)
222
222
 
223
223
  if user is None:
224
224
  raise forms.ValidationError('Incorrect email address or password')
@@ -50,7 +50,7 @@ choices = [('Miss', 'Miss'), ('Mrs', 'Mrs'), ('Ms', 'Ms'), ('Mr', 'Mr'),
50
50
 
51
51
  class TeacherSignupForm(forms.Form):
52
52
 
53
- title = forms.ChoiceField(
53
+ teacher_title = forms.ChoiceField(
54
54
  label='Title',
55
55
  choices=choices,
56
56
  widget=forms.Select(
@@ -59,7 +59,7 @@ class TeacherSignupForm(forms.Form):
59
59
  }
60
60
  )
61
61
  )
62
- first_name = forms.CharField(
62
+ teacher_first_name = forms.CharField(
63
63
  label='First name',
64
64
  max_length=100,
65
65
  widget=forms.TextInput(
@@ -68,7 +68,7 @@ class TeacherSignupForm(forms.Form):
68
68
  }
69
69
  )
70
70
  )
71
- last_name = forms.CharField(
71
+ teacher_last_name = forms.CharField(
72
72
  label='Last name',
73
73
  max_length=100,
74
74
  widget=forms.TextInput(
@@ -77,7 +77,7 @@ class TeacherSignupForm(forms.Form):
77
77
  }
78
78
  )
79
79
  )
80
- email = forms.EmailField(
80
+ teacher_email = forms.EmailField(
81
81
  label='Email address',
82
82
  widget=forms.EmailInput(
83
83
  attrs={
@@ -85,17 +85,17 @@ class TeacherSignupForm(forms.Form):
85
85
  }
86
86
  )
87
87
  )
88
- password = forms.CharField(
88
+ teacher_password = forms.CharField(
89
89
  label='Password',
90
90
  widget=forms.PasswordInput()
91
91
  )
92
- confirm_password = forms.CharField(
92
+ teacher_confirm_password = forms.CharField(
93
93
  label='Confirm Password',
94
94
  widget=forms.PasswordInput()
95
95
  )
96
96
 
97
97
  def clean_email(self):
98
- email = self.cleaned_data.get('email', None)
98
+ email = self.cleaned_data.get('teacher_email', None)
99
99
 
100
100
  if email and Teacher.objects.filter(new_user__email=email).exists():
101
101
  raise forms.ValidationError("That email address is already in use")
@@ -103,7 +103,7 @@ class TeacherSignupForm(forms.Form):
103
103
  return email
104
104
 
105
105
  def clean_password(self):
106
- password = self.cleaned_data.get('password', None)
106
+ password = self.cleaned_data.get('teacher_password', None)
107
107
 
108
108
  if password and not password_strength_test(password):
109
109
  raise forms.ValidationError(
@@ -115,8 +115,8 @@ class TeacherSignupForm(forms.Form):
115
115
  if any(self.errors):
116
116
  return
117
117
 
118
- password = self.cleaned_data.get('password', None)
119
- confirm_password = self.cleaned_data.get('confirm_password', None)
118
+ password = self.cleaned_data.get('teacher_password', None)
119
+ confirm_password = self.cleaned_data.get('teacher_confirm_password', None)
120
120
 
121
121
  if password and confirm_password and password != confirm_password:
122
122
  raise forms.ValidationError('Your passwords do not match')
@@ -156,8 +156,7 @@ class TeacherEditAccountForm(forms.Form):
156
156
  email = self.cleaned_data.get('email', None)
157
157
  if email:
158
158
  teachers = Teacher.objects.filter(new_user__email=email)
159
- if ((len(teachers) == 1 and teachers[0].new_user != self.user) or
160
- len(teachers) > 1):
159
+ if (len(teachers) == 1 and teachers[0].new_user != self.user) or len(teachers) > 1:
161
160
  raise forms.ValidationError("That email address is already in use")
162
161
 
163
162
  return email
@@ -35,64 +35,67 @@ copyright notice and these terms. You must not misrepresent the origins of this
35
35
  program; modified versions of the program must be marked as such and not
36
36
  identified as the original program.
37
37
  */
38
- var PASSWORD_TYPE = '';
39
- var PASSWORD_FIELD_ID = '';
40
- var password_field = '';
38
+ var TEACHER_PASSWORD_FIELD_ID = '';
39
+ var INDEP_STUDENT_PASSWORD_FIELD_ID = '';
40
+ var teacher_password_field = '';
41
+ var indep_student_password_field = '';
42
+
43
+ var password_strengths = [
44
+ { name: 'No password!', colour: '#FF0000' },
45
+ { name: 'Password too weak', colour: '#DBA901' },
46
+ { name: 'Strong password', colour: '#088A08' }
47
+ ];
41
48
 
42
49
  $(function() {
43
- var updateFunction = (PASSWORD_TYPE == 'INDEPENDENT_STUDENT') ? updateIndependentStudentPasswordStrength : updateTeacherPasswordStrength;
44
50
 
45
- password_field = $('#' + PASSWORD_FIELD_ID);
46
- password_field.on('keyup', updateFunction);
47
- password_field.on('paste', updateFunction);
48
- password_field.on('cut', updateFunction);
49
- updateFunction();
51
+ teacher_password_field = $('#' + TEACHER_PASSWORD_FIELD_ID);
52
+ indep_student_password_field = $('#' + INDEP_STUDENT_PASSWORD_FIELD_ID);
53
+
54
+ setUpDynamicUpdates(teacher_password_field, updateTeacherPasswordStrength);
55
+ setUpDynamicUpdates(indep_student_password_field, updateIndependentStudentPasswordStrength);
56
+
57
+ updateTeacherPasswordStrength();
58
+ updateIndependentStudentPasswordStrength();
50
59
  });
51
60
 
61
+ function setUpDynamicUpdates(password_field, update_function) {
62
+ password_field.on('keyup', update_function);
63
+ password_field.on('paste', update_function);
64
+ password_field.on('cut', update_function);
65
+ }
66
+
52
67
  function updateTeacherPasswordStrength() {
53
68
  // The reason for the timeout is that if we just got $('#...').val() we'd get the
54
69
  // old value before the keypress / change. Apparently even jQuery itself implements
55
70
  // things this way, so maybe there is no better workaround.
56
71
 
57
72
  setTimeout(function() {
58
- var teacher_password_strengths = [
59
- { name: 'No password!', colour: '#FF0000' },
60
- { name: 'Password too weak', colour: '#DBA901' },
61
- { name: 'Strong password', colour: '#088A08' }
62
- ];
63
73
 
64
- var password = $('#' + PASSWORD_FIELD_ID).val();
74
+ var password = $('#' + TEACHER_PASSWORD_FIELD_ID).val();
65
75
 
66
76
  var strength = 0;
67
77
  if (password.length > 0) { strength++; }
68
78
  if (password.length > 8 && !(password.search(/[A-Z]/) === -1 || password.search(/[a-z]/) === -1 || password.search(/[0-9]/) === -1)) { strength++; }
69
79
 
70
- $('.password-strength-sign').css('background-color', teacher_password_strengths[strength].colour);
71
- $('.password-strength-text').html(teacher_password_strengths[strength].name);
80
+ updatePasswordCSS('#teacher-password-sign', '#teacher-password-text', strength);
72
81
  });
73
82
  }
74
83
 
75
84
  function updateIndependentStudentPasswordStrength() {
76
85
 
77
86
  setTimeout(function() {
78
- var independent_student_password_strengths = [
79
- { name: 'Password quality', colour: '' },
80
- { name: 'Not long enough', colour: '#DBA901' },
81
- { name: 'Good password', colour: '#088A08' }
82
- ];
83
87
 
84
- var password = $('#' + PASSWORD_FIELD_ID).val();
88
+ var password = $('#' + INDEP_STUDENT_PASSWORD_FIELD_ID).val();
85
89
 
86
90
  var strength = 0;
87
- if (password == '') { strength = 0; }
88
- else if (password.length < 6) { strength = 1; }
89
- else if (password.length >= 6) { strength = 2; }
90
-
91
- if (password == '') { $('.password-strength-bar-container').hide(); $('.password-strength-text').hide(); }
92
- else { $('.password-strength-bar-container').show(); $('.password-strength-text').show(); }
91
+ if (password.length > 0) { strength++; }
92
+ if (password.length > 5) { strength++; }
93
93
 
94
- $('.password-strength-bar').css('width', strength / 2 * 100 + '%');
95
- $('.password-strength-bar').css('background-color', independent_student_password_strengths[strength].colour);
96
- $('.password-strength-text').html(independent_student_password_strengths[strength].name);
94
+ updatePasswordCSS('#student-password-sign', '#student-password-text', strength);
97
95
  });
96
+ }
97
+
98
+ function updatePasswordCSS(passwordStrengthSign, passwordStrengthText, strength) {
99
+ $(passwordStrengthSign).css('background-color', password_strengths[strength].colour);
100
+ $(passwordStrengthText).html(password_strengths[strength].name);
98
101
  }
@@ -48,6 +48,7 @@ $color-background-secondary: #fff;
48
48
  $color-background-tertiary: $color-text-grey;
49
49
  $color-background-teach: $color-teacher-blue;
50
50
  $color-background-play: $color-student-orange;
51
+ $color-background-play-indep: #ff637d;
51
52
  $color-background-warning: #fab300;
52
53
  $color-background-positive: #7ed321;
53
54
  $color-background-danger: #f00;
@@ -771,6 +772,10 @@ form {
771
772
  background-color: $color-background-play;
772
773
  }
773
774
 
775
+ .form--register--indep-student {
776
+ background-color: $color-background-play-indep;
777
+ }
778
+
774
779
  .form__choice {
775
780
  @include _margin(40px, 0px, 0px, 37px);
776
781
  background-color: $color-background-secondary;
@@ -138,8 +138,8 @@
138
138
  </tr>
139
139
  <tr>
140
140
  <th>Session 6</th>
141
- <td><a href="{% url 'materials_viewer' pdf_name='KS1_S5_1' %}">KS1-S6-1</a></td>
142
- <td><a href="{% url 'materials_viewer' pdf_name='KS1_S5_2' %}">KS1-S6-2</a></td>
141
+ <td><a href="{% url 'materials_viewer' pdf_name='KS1_S6_1' %}">KS1-S6-1</a></td>
142
+ <td><a href="{% url 'materials_viewer' pdf_name='KS1_S6_2' %}">KS1-S6-2</a></td>
143
143
  </tr>
144
144
  <tr>
145
145
  <th>Session 7</th>
@@ -269,7 +269,7 @@
269
269
  <td><a href="{% url 'materials_viewer' pdf_name='LKS2_S4_2' %}">LKS2-S4-2</a></td>
270
270
  <td><a href="{% url 'materials_viewer' pdf_name='LKS2_S4_3' %}">LKS2-S4-3</a></td>
271
271
  <td><a href="{% url 'materials_viewer' pdf_name='LKS2_S4_4' %}">LKS2-S4-4</a></td>
272
- </tr
272
+ </tr>
273
273
  <tr>
274
274
  <th>Session 5</th>
275
275
  <td><a href="{% url 'materials_viewer' pdf_name='LKS2_S5_1' %}">LKS2-S5-1</a></td>
@@ -57,13 +57,13 @@
57
57
 
58
58
  {{ login_form.non_field_errors }}
59
59
 
60
- {{ login_form.email.errors }}
61
- <label for="id_{{ login_form.email.html_name }}">{{ login_form.email.label }}</label>
62
- {{ login_form.email }}
60
+ {{ login_form.teacher_email.errors }}
61
+ <label for="id_{{ login_form.teacher_email.html_name }}">{{ login_form.teacher_email.label }}</label>
62
+ {{ login_form.teacher_email }}
63
63
 
64
- {{ login_form.password.errors }}
65
- <label for="id_{{ login_form.password.html_name }}">{{ login_form.password.label }}</label>
66
- {{ login_form.password }}
64
+ {{ login_form.teacher_password.errors }}
65
+ <label for="id_{{ login_form.teacher_password.html_name }}">{{ login_form.teacher_password.label }}</label>
66
+ {{ login_form.teacher_password }}
67
67
 
68
68
  {% if login_form.recaptcha %}
69
69
  {{ login_form.recaptcha.errors }}
@@ -0,0 +1,116 @@
1
+ {% extends 'redesign/base_new.html' %}
2
+ {% load staticfiles %}
3
+ {% load app_tags %}
4
+
5
+ {% block css %}
6
+ {{ block.super }}
7
+ {% endblock css %}
8
+
9
+ {% block scripts %}
10
+ {{ block.super }}
11
+ {% endblock scripts %}
12
+
13
+ {% block pageID %}id='homeWrapper'{% endblock %}
14
+
15
+ {% block content %}
16
+ {{ block.super }}
17
+
18
+ <div id="signup_page"></div>
19
+
20
+ <div class="row popup is-flex">
21
+ <div class="form--register form--register--teacher col-sm-6">
22
+ <div class="form col-sm-8 col-sm-offset-2">
23
+ <h1>Register as a teacher</h1>
24
+ <p class="body-text">Once you&rsquo;ve registered your personal details and logged in, you&rsquo;ll be able to create your school or club, or join other teachers at your institution.<br/></p>
25
+ <form method='post' id="form-reg-teacher">
26
+
27
+ {% csrf_token %}
28
+
29
+ {{ teacher_signup_form.non_field_errors }}
30
+
31
+ <label for="id_teacher_signup-teacher_title">{{ teacher_signup_form.teacher_title.label }}</label>
32
+ {{ teacher_signup_form.teacher_title }}
33
+ {{ teacher_signup_form.teacher_title.errors }}
34
+
35
+ <label for="id_teacher_signup-teacher_first_name">{{ teacher_signup_form.teacher_first_name.label }}</label>
36
+ {{ teacher_signup_form.teacher_first_name }}
37
+ {{ teacher_signup_form.teacher_first_name.errors }}
38
+
39
+ <label for="id_teacher_signup-teacher_last_name">{{ teacher_signup_form.teacher_last_name.label }}</label>
40
+ {{ teacher_signup_form.teacher_last_name }}
41
+ {{ teacher_signup_form.teacher_last_name.errors }}
42
+
43
+ <label for="id_teacher_signup-teacher_email">{{ teacher_signup_form.teacher_email.label }}</label>
44
+ {{ teacher_signup_form.teacher_email }}
45
+ {{ teacher_signup_form.teacher_email.errors }}
46
+
47
+ <label for="id_teacher_signup-teacher_password">{{ teacher_signup_form.teacher_password.label }}</label>
48
+ {{ teacher_signup_form.teacher_password }}
49
+ {{ teacher_signup_form.teacher_password.errors }}
50
+
51
+ <label for="id_teacher_signup-teacher_confirm_password">{{ teacher_signup_form.teacher_confirm_password.label }}</label>
52
+ {{ teacher_signup_form.teacher_confirm_password }}
53
+ {{ teacher_signup_form.teacher_confirm_password.errors }}
54
+
55
+ <div class="row--under">
56
+ <div class="password-strength-container">
57
+ <div id="teacher-password-sign" class='password-strength-sign'></div>
58
+ <div id="teacher-password-text" class='password-strength-text'></div>
59
+ </div>
60
+ </div>
61
+
62
+ <button class="button--big button--primary--general-educate" type="submit" name="teacher_signup">Register</button>
63
+ </form>
64
+
65
+ </div>
66
+ </div>
67
+ <div class="form--register form--register--indep-student col-sm-6">
68
+ <div class="form col-sm-8 col-sm-offset-2">
69
+ <h1>Register as an independent student</h1>
70
+ <p class="body-text">Are you part of a school or club? If so, please <a href="{% url 'login_new' %}">log-in</a> or speak to your teacher. If you want to register as an <strong>independent student</strong>, please register below:</p>
71
+ <form id="form-signup-independent-student" method='post'>
72
+
73
+ {% csrf_token %}
74
+
75
+ {{ student_signup_form.non_field_errors }}
76
+
77
+ <label for="id_{{ student_signup_form.name.html_name }}">{{ student_signup_form.name.label }}</label>
78
+ {{ student_signup_form.name }}
79
+ {{ student_signup_form.name.errors }}
80
+
81
+ <label for="id_{{ student_signup_form.username.html_name }}">{{ student_signup_form.username.label }}</label>
82
+ {{ student_signup_form.username }}
83
+ {{ student_signup_form.username.errors }}
84
+
85
+ <label for="id_{{ student_signup_form.email.html_name }}">{{ student_signup_form.email.label }}</label>
86
+ {{ student_signup_form.email }}
87
+ {{ student_signup_form.email.errors }}
88
+
89
+ <label for="id_{{ student_signup_form.password.html_name }}">{{ student_signup_form.password.label }}</label>
90
+ {{ student_signup_form.password }}
91
+ {{ student_signup_form.password.errors }}
92
+
93
+ <label for="id_{{ student_signup_form.confirm_password.html_name }}">{{ student_signup_form.confirm_password.label }}</label>
94
+ {{ student_signup_form.confirm_password }}
95
+ {{ student_signup_form.confirm_password.errors }}
96
+
97
+ <div class="row--under">
98
+ <div class="password-strength-container">
99
+ <div id="student-password-sign" class='password-strength-sign'></div>
100
+ <div id="student-password-text" class='password-strength-text'></div>
101
+ </div>
102
+ </div>
103
+
104
+ <button type='submit' name='student_signup' class="button--big button--primary--general-play" value='Register'>Register</button>
105
+ </form>
106
+ </div>
107
+ </div>
108
+ </div>
109
+
110
+ <script type="text/javascript" src="{% static 'portal/js/passwordStrength_new.js' %}"></script>
111
+ <script>
112
+ var TEACHER_PASSWORD_FIELD_ID = '{{ teacher_signup_form.teacher_password.auto_id }}';
113
+ var INDEP_STUDENT_PASSWORD_FIELD_ID = '{{ student_signup_form.password.auto_id }}';
114
+ </script>
115
+
116
+ {% endblock content %}
@@ -35,6 +35,7 @@
35
35
  # program; modified versions of the program must be marked as such and not
36
36
  # identified as the original program.
37
37
  import login_page
38
+ import signup_page
38
39
  from base_page import BasePage
39
40
 
40
41
 
@@ -46,3 +47,7 @@ class HomePage(BasePage):
46
47
  def go_to_login_page(self):
47
48
  self.browser.find_element_by_id('login_button').click()
48
49
  return login_page.LoginPage(self.browser)
50
+
51
+ def go_to_signup_page(self):
52
+ self.browser.find_element_by_id('signup_button').click()
53
+ return signup_page.SignupPage(self.browser)
@@ -49,12 +49,34 @@ class SignupPage(BasePage):
49
49
  assert self.on_correct_page('signup_page')
50
50
 
51
51
  def signup(self, title, first_name, last_name, email, password, confirm_password):
52
- Select(self.browser.find_element_by_id('id_signup-title')).select_by_value(title)
53
- self.browser.find_element_by_id('id_signup-first_name').send_keys(first_name)
54
- self.browser.find_element_by_id('id_signup-last_name').send_keys(last_name)
55
- self.browser.find_element_by_id('id_signup-email').send_keys(email)
56
- self.browser.find_element_by_id('id_signup-password').send_keys(password)
57
- self.browser.find_element_by_id('id_signup-confirm_password').send_keys(confirm_password)
58
-
59
- self.browser.find_element_by_name('signup').click()
52
+ Select(self.browser.find_element_by_id('id_teacher_signup-teacher_title')).select_by_value(title)
53
+ self.browser.find_element_by_id('id_teacher_signup-teacher_first_name').send_keys(first_name)
54
+ self.browser.find_element_by_id('id_teacher_signup-teacher_last_name').send_keys(last_name)
55
+ self.browser.find_element_by_id('id_teacher_signup-teacher_email').send_keys(email)
56
+ self.browser.find_element_by_id('id_teacher_signup-teacher_password').send_keys(password)
57
+ self.browser.find_element_by_id('id_teacher_signup-teacher_confirm_password').send_keys(confirm_password)
58
+
59
+ self.browser.find_element_by_name('teacher_signup').click()
60
60
  return email_verification_needed_page_new.EmailVerificationNeededPage(self.browser)
61
+
62
+ def independent_student_signup(self, name, username, email_address, password, confirm_password, success=True):
63
+ self.browser.find_element_by_id('id_student_signup-name').send_keys(name)
64
+ self.browser.find_element_by_id('id_student_signup-username').send_keys(username)
65
+ self.browser.find_element_by_id('id_student_signup-email').send_keys(email_address)
66
+ self.browser.find_element_by_id('id_student_signup-password').send_keys(password)
67
+ self.browser.find_element_by_id('id_student_signup-confirm_password').send_keys(confirm_password)
68
+
69
+ self.browser.find_element_by_name('student_signup').click()
70
+ if success:
71
+ from email_verification_needed_page_new import EmailVerificationNeededPage
72
+ return EmailVerificationNeededPage(self.browser)
73
+ else:
74
+ return self
75
+
76
+ def has_independent_student_signup_failed(self):
77
+ if not self.element_exists_by_css('.errorlist'):
78
+ return False
79
+
80
+ errors = self.browser.find_element_by_id('form-signup-independent-student').find_element_by_class_name('errorlist').text
81
+ error = 'Password not strong enough, consider using at least 6 characters'
82
+ return error in errors
@@ -37,8 +37,6 @@
37
37
  from teach_base_page_new import TeachBasePage
38
38
  from selenium.webdriver.support.ui import Select
39
39
 
40
- import time
41
-
42
40
 
43
41
  class TeachDashboardPage(TeachBasePage):
44
42
  def __init__(self, browser):