rapid-router 5.4.1__py2.py3-none-any.whl → 7.6.8__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (354) hide show
  1. example_project/rapid_router_test_settings.py +164 -0
  2. example_project/settings.py +152 -0
  3. example_project/urls.py +15 -0
  4. example_project/{example_project/wsgi.py → wsgi.py} +2 -1
  5. game/__init__.py +1 -1
  6. game/admin.py +43 -4
  7. game/app_settings.py +3 -7
  8. game/character.py +26 -18
  9. game/decor.py +172 -97
  10. game/end_to_end_tests/base_game_test.py +44 -33
  11. game/end_to_end_tests/editor_page.py +17 -2
  12. game/end_to_end_tests/game_page.py +127 -45
  13. game/end_to_end_tests/selenium_test_case.py +1 -20
  14. game/end_to_end_tests/test_cow_crashes.py +3 -5
  15. game/end_to_end_tests/test_language_dropdown.py +14 -0
  16. game/end_to_end_tests/test_level_editor.py +290 -0
  17. game/end_to_end_tests/test_level_failures.py +1 -1
  18. game/end_to_end_tests/test_level_selection.py +79 -0
  19. game/end_to_end_tests/test_play_through.py +240 -102
  20. game/end_to_end_tests/test_python_levels.py +44 -13
  21. game/end_to_end_tests/test_saving_workspace.py +22 -0
  22. game/forms.py +9 -2
  23. game/level_management.py +38 -29
  24. game/messages.py +1218 -203
  25. game/migrations/0001_squashed_0025_levels_ordering_pt1.py +19 -1
  26. game/migrations/0026_levels_pt2.py +13 -2
  27. game/migrations/0032_cannot_turn_left_level.py +13 -2
  28. game/migrations/0033_recursion_level.py +13 -2
  29. game/migrations/0034_joes_level.py +13 -2
  30. game/migrations/0035_disable_route_score_level_70.py +0 -2
  31. game/migrations/0036_level_score_73.py +0 -2
  32. game/migrations/0037_level_score_79.py +0 -2
  33. game/migrations/0038_level_score_40.py +0 -1
  34. game/migrations/0042_level_score_73.py +0 -2
  35. game/migrations/0048_add_cow_field_and_blocks.py +0 -2
  36. game/migrations/0049_level_score_34.py +0 -2
  37. game/migrations/0050_level_score_40.py +0 -2
  38. game/migrations/0051_level_score_49.py +0 -1
  39. game/migrations/0076_level_locked_for_class.py +19 -0
  40. game/migrations/0077_alter_level_next_level.py +52 -0
  41. game/migrations/0078_add_block_types.py +23 -0
  42. game/migrations/0079_populate_block_type_add_cow_blocks.py +60 -0
  43. game/migrations/0080_level_disable_algorithm_score.py +18 -0
  44. game/migrations/0081_first_12_levels_no_algo_score.py +29 -0
  45. game/migrations/0082_level_43_solution.py +16 -0
  46. game/migrations/0083_add_cows_to_existing_levels.py +195 -0
  47. game/migrations/0084_alter_block_block_type.py +18 -0
  48. game/migrations/0085_add_new_blocks.py +53 -0
  49. game/migrations/0086_loop_levels.py +482 -0
  50. game/migrations/0087_workspace_python_view_enabled.py +18 -0
  51. game/migrations/0088_rename_episodes.py +35 -0
  52. game/migrations/0089_episodes_in_development.py +30 -0
  53. game/migrations/0090_add_missing_model_solutions.py +144 -0
  54. game/migrations/0091_disable_algo_score_if_no_model_solution.py +46 -0
  55. game/migrations/0092_disable_algo_score_in_custom_levels.py +28 -0
  56. game/migrations/0093_alter_level_character_name.py +18 -0
  57. game/migrations/0094_add_hint_lesson_subtitle_to_levels.py +28 -0
  58. game/migrations/0095_level_commands.py +18 -0
  59. game/migrations/0096_alter_level_commands.py +18 -0
  60. game/migrations/0097_add_python_den_levels.py +1515 -0
  61. game/migrations/0098_add_episode_link_fields.py +44 -0
  62. game/migrations/0099_python_episodes_links.py +103 -0
  63. game/migrations/0100_reorder_python_levels.py +179 -0
  64. game/migrations/0101_rename_episodes.py +45 -0
  65. game/migrations/0102_reoder_episodes_13_14.py +136 -0
  66. game/migrations/0103_level_1015_solution.py +26 -0
  67. game/migrations/0104_remove_level_direct_drive.py +17 -0
  68. game/migrations/0105_delete_invalid_attempts.py +18 -0
  69. game/migrations/0106_fields_to_snake_case.py +48 -0
  70. game/migrations/0107_rename_worksheet_link_episode_student_worksheet_link.py +18 -0
  71. game/migrations/0108_episode_indy_worksheet_link.py +18 -0
  72. game/migrations/0109_create_episodes_23_and_24.py +99 -0
  73. game/migrations/0110_remove_episode_indy_worksheet_link_and_more.py +100 -0
  74. game/migrations/0111_create_worksheets.py +149 -0
  75. game/migrations/0112_worksheet_locked_classes.py +21 -0
  76. game/migrations/0113_level_needs_approval.py +18 -0
  77. game/migrations/0114_default_and_non_student_levels_no_approval.py +31 -0
  78. game/migrations/0115_level_level__default_does_not_need_approval.py +22 -0
  79. game/migrations/0116_update_worksheet_video_links.py +68 -0
  80. game/migrations/0117_update_solutions_to_if_else.py +61 -0
  81. game/models.py +157 -16
  82. game/permissions.py +34 -19
  83. game/python_den_urls.py +26 -0
  84. game/random_road.py +43 -127
  85. game/serializers.py +12 -17
  86. game/static/django_reverse_js/js/reverse.js +171 -0
  87. game/static/game/css/LilitaOne-Regular.ttf +0 -0
  88. game/static/game/css/backgrounds.css +14 -10
  89. game/static/game/css/dataTables.custom.css +4 -2
  90. game/static/game/css/dataTables.jqueryui.css +561 -320
  91. game/static/game/css/editor.css +47 -0
  92. game/static/game/css/game.css +43 -49
  93. game/static/game/css/game_screen.css +116 -53
  94. game/static/game/css/jquery.dataTables.css +455 -251
  95. game/static/game/css/level_editor.css +10 -1
  96. game/static/game/css/level_selection.css +32 -3
  97. game/static/game/css/level_share.css +6 -5
  98. game/static/game/css/skulpt/codemirror.css +1 -0
  99. game/static/game/image/Python_Den_hero_student.png +0 -0
  100. game/static/game/image/Python_levels_page.svg +1954 -0
  101. game/static/game/image/characters/front_view/Electric_van.svg +448 -0
  102. game/static/game/image/characters/top_view/Electric_van.svg +448 -0
  103. game/static/game/image/characters/top_view/Sleigh.svg +436 -0
  104. game/static/game/image/decor/city/solar_panel.svg +1200 -0
  105. game/static/game/image/decor/farm/solar_panel.svg +86 -0
  106. game/static/game/image/decor/grass/solar_panel.svg +86 -0
  107. game/static/game/image/decor/snow/barn.svg +1788 -0
  108. game/static/game/image/decor/snow/cfc.svg +1050 -147
  109. game/static/game/image/decor/snow/crops.svg +7370 -0
  110. game/static/game/image/decor/snow/hospital.svg +1220 -0
  111. game/static/game/image/decor/snow/house1.svg +971 -0
  112. game/static/game/image/decor/snow/house2.svg +1574 -0
  113. game/static/game/image/decor/snow/school.svg +1071 -0
  114. game/static/game/image/decor/snow/shop.svg +3211 -0
  115. game/static/game/image/decor/snow/solar_panel.svg +173 -0
  116. game/static/game/image/electric_van.svg +448 -0
  117. game/static/game/image/icons/add_house.svg +26 -0
  118. game/static/game/image/icons/delete_house.svg +26 -0
  119. game/static/game/image/icons/description.svg +1 -0
  120. game/static/game/image/icons/hint.svg +1 -0
  121. game/static/game/image/icons/if_else.svg +3 -0
  122. game/static/game/image/icons/python.svg +1 -1
  123. game/static/game/image/if_else_example.png +0 -0
  124. game/static/game/image/pigeon.svg +684 -0
  125. game/static/game/image/python_den_header.svg +19 -0
  126. game/static/game/js/animation.js +84 -28
  127. game/static/game/js/blockly/msg/js/bg.js +52 -1
  128. game/static/game/js/blockly/msg/js/ca.js +52 -1
  129. game/static/game/js/blockly/msg/js/en-gb.js +52 -1
  130. game/static/game/js/blockly/msg/js/en.js +52 -1
  131. game/static/game/js/blockly/msg/js/es.js +52 -1
  132. game/static/game/js/blockly/msg/js/fr.js +52 -1
  133. game/static/game/js/blockly/msg/js/hi.js +52 -1
  134. game/static/game/js/blockly/msg/js/it.js +52 -1
  135. game/static/game/js/blockly/msg/js/pl.js +52 -1
  136. game/static/game/js/blockly/msg/js/pt-br.js +52 -1
  137. game/static/game/js/blockly/msg/js/ru.js +52 -1
  138. game/static/game/js/blockly/msg/js/ur.js +52 -1
  139. game/static/game/js/blocklyCompiler.js +550 -392
  140. game/static/game/js/blocklyControl.js +335 -302
  141. game/static/game/js/blocklyCustomBlocks.js +691 -458
  142. game/static/game/js/blocklyCustomisations.js +3 -1
  143. game/static/game/js/button.js +12 -0
  144. game/static/game/js/cow.js +15 -130
  145. game/static/game/js/drawing.js +313 -201
  146. game/static/game/js/editor.js +23 -0
  147. game/static/game/js/game.js +148 -139
  148. game/static/game/js/jquery.dataTables.min.js +3 -159
  149. game/static/game/js/level_editor.js +823 -448
  150. game/static/game/js/level_moderation.js +33 -2
  151. game/static/game/js/level_selection.js +62 -25
  152. game/static/game/js/loadLanguages.js +21 -0
  153. game/static/game/js/map.js +106 -36
  154. game/static/game/js/model.js +55 -107
  155. game/static/game/js/pathFinder.js +73 -72
  156. game/static/game/js/program.js +184 -193
  157. game/static/game/js/pythonControl.js +14 -1
  158. game/static/game/js/scoreboard.js +0 -37
  159. game/static/game/js/scoreboardSharedLevels.js +48 -0
  160. game/static/game/js/sharing.js +22 -10
  161. game/static/game/js/skulpt/codemirror.js +5 -4
  162. game/static/game/js/skulpt/skulpt-stdlib.js +1 -1
  163. game/static/game/js/sound.js +52 -5
  164. game/static/game/js/van.js +0 -7
  165. game/static/game/raphael_image/characters/top_view/Electric_van.svg +448 -0
  166. game/static/game/raphael_image/characters/top_view/Sleigh.svg +436 -0
  167. game/static/game/raphael_image/decor/city/solar_panel.svg +1200 -0
  168. game/static/game/raphael_image/decor/farm/solar_panel.svg +86 -0
  169. game/static/game/raphael_image/decor/grass/solar_panel.svg +86 -0
  170. game/static/game/raphael_image/decor/snow/barn.svg +1788 -0
  171. game/static/game/raphael_image/decor/snow/cfc.svg +1050 -147
  172. game/static/game/raphael_image/decor/snow/crops.svg +7370 -0
  173. game/static/game/raphael_image/decor/snow/hospital.svg +1220 -0
  174. game/static/game/raphael_image/decor/snow/house1.svg +971 -0
  175. game/static/game/raphael_image/decor/snow/house2.svg +1574 -0
  176. game/static/game/raphael_image/decor/snow/school.svg +1071 -0
  177. game/static/game/raphael_image/decor/snow/shop.svg +3211 -0
  178. game/static/game/raphael_image/decor/snow/solar_panel.svg +173 -0
  179. game/static/game/raphael_image/pigeon.svg +685 -0
  180. game/static/game/raphael_image/sleigh_wreckage.svg +430 -0
  181. game/static/game/sass/game.scss +22 -6
  182. game/static/game/sound/clown_horn.mp3 +0 -0
  183. game/static/game/sound/clown_horn.ogg +0 -0
  184. game/static/game/sound/electric_van_starting.mp3 +0 -0
  185. game/static/game/sound/electric_van_starting.ogg +0 -0
  186. game/static/game/sound/pigeon.mp3 +0 -0
  187. game/static/game/sound/pigeon.ogg +0 -0
  188. game/static/game/sound/sleigh_bells.mp3 +0 -0
  189. game/static/game/sound/sleigh_bells.ogg +0 -0
  190. game/static/game/sound/sleigh_crash.mp3 +0 -0
  191. game/static/game/sound/sleigh_crash.ogg +0 -0
  192. game/templates/game/base.html +35 -15
  193. game/templates/game/basenonav.html +23 -17
  194. game/templates/game/game.html +236 -111
  195. game/templates/game/level_editor.html +353 -275
  196. game/templates/game/level_moderation.html +19 -6
  197. game/templates/game/level_selection.html +75 -62
  198. game/templates/game/python_den_level_selection.html +291 -0
  199. game/templates/game/python_den_worksheet.html +101 -0
  200. game/templates/game/scoreboard.html +88 -65
  201. game/tests/test_level_editor.py +210 -35
  202. game/tests/test_level_moderation.py +6 -20
  203. game/tests/test_level_selection.py +332 -11
  204. game/tests/test_python_den_worksheet.py +85 -0
  205. game/tests/test_scoreboard.py +258 -66
  206. game/tests/utils/level.py +43 -3
  207. game/tests/utils/teacher.py +2 -2
  208. game/theme.py +21 -21
  209. game/urls.py +125 -78
  210. game/views/language_code_conversions.py +90 -0
  211. game/views/level.py +201 -63
  212. game/views/level_editor.py +109 -48
  213. game/views/level_moderation.py +29 -6
  214. game/views/level_selection.py +179 -56
  215. game/views/level_solutions.py +600 -106
  216. game/views/scoreboard.py +181 -66
  217. game/views/worksheet.py +25 -0
  218. rapid_router-7.6.8.dist-info/METADATA +174 -0
  219. {rapid_router-5.4.1.dist-info → rapid_router-7.6.8.dist-info}/RECORD +222 -242
  220. {rapid_router-5.4.1.dist-info → rapid_router-7.6.8.dist-info}/WHEEL +1 -1
  221. rapid_router-7.6.8.dist-info/licenses/LICENSE.md +3 -0
  222. example_project/example_project/__init__.py +0 -1
  223. example_project/example_project/settings.py +0 -54
  224. example_project/example_project/urls.py +0 -16
  225. example_project/manage.py +0 -10
  226. game/autoconfig.py +0 -59
  227. game/csp_config.py +0 -23
  228. game/locale/ar_SA/LC_MESSAGES/django.mo +0 -0
  229. game/locale/ar_SA/LC_MESSAGES/django.po +0 -405
  230. game/locale/ar_SA/LC_MESSAGES/djangojs.mo +0 -0
  231. game/locale/ar_SA/LC_MESSAGES/djangojs.po +0 -743
  232. game/locale/bg_BG/LC_MESSAGES/django.mo +0 -0
  233. game/locale/bg_BG/LC_MESSAGES/django.po +0 -405
  234. game/locale/bg_BG/LC_MESSAGES/djangojs.mo +0 -0
  235. game/locale/bg_BG/LC_MESSAGES/djangojs.po +0 -739
  236. game/locale/ca_ES/LC_MESSAGES/django.mo +0 -0
  237. game/locale/ca_ES/LC_MESSAGES/django.po +0 -405
  238. game/locale/ca_ES/LC_MESSAGES/djangojs.mo +0 -0
  239. game/locale/ca_ES/LC_MESSAGES/djangojs.po +0 -740
  240. game/locale/cs_CZ/LC_MESSAGES/django.mo +0 -0
  241. game/locale/cs_CZ/LC_MESSAGES/django.po +0 -405
  242. game/locale/cs_CZ/LC_MESSAGES/djangojs.mo +0 -0
  243. game/locale/cs_CZ/LC_MESSAGES/djangojs.po +0 -741
  244. game/locale/cy_GB/LC_MESSAGES/django.mo +0 -0
  245. game/locale/cy_GB/LC_MESSAGES/django.po +0 -405
  246. game/locale/cy_GB/LC_MESSAGES/djangojs.mo +0 -0
  247. game/locale/cy_GB/LC_MESSAGES/djangojs.po +0 -743
  248. game/locale/de_DE/LC_MESSAGES/django.mo +0 -0
  249. game/locale/de_DE/LC_MESSAGES/django.po +0 -405
  250. game/locale/de_DE/LC_MESSAGES/djangojs.mo +0 -0
  251. game/locale/de_DE/LC_MESSAGES/djangojs.po +0 -739
  252. game/locale/el_GR/LC_MESSAGES/django.mo +0 -0
  253. game/locale/el_GR/LC_MESSAGES/django.po +0 -405
  254. game/locale/el_GR/LC_MESSAGES/djangojs.mo +0 -0
  255. game/locale/el_GR/LC_MESSAGES/djangojs.po +0 -739
  256. game/locale/en_GB/LC_MESSAGES/django.mo +0 -0
  257. game/locale/en_GB/LC_MESSAGES/django.po +0 -405
  258. game/locale/en_GB/LC_MESSAGES/djangojs.mo +0 -0
  259. game/locale/en_GB/LC_MESSAGES/djangojs.po +0 -739
  260. game/locale/es_ES/LC_MESSAGES/django.mo +0 -0
  261. game/locale/es_ES/LC_MESSAGES/django.po +0 -405
  262. game/locale/es_ES/LC_MESSAGES/djangojs.mo +0 -0
  263. game/locale/es_ES/LC_MESSAGES/djangojs.po +0 -739
  264. game/locale/fi_FI/LC_MESSAGES/django.mo +0 -0
  265. game/locale/fi_FI/LC_MESSAGES/django.po +0 -405
  266. game/locale/fi_FI/LC_MESSAGES/djangojs.mo +0 -0
  267. game/locale/fi_FI/LC_MESSAGES/djangojs.po +0 -739
  268. game/locale/fr_FR/LC_MESSAGES/django.mo +0 -0
  269. game/locale/fr_FR/LC_MESSAGES/django.po +0 -405
  270. game/locale/fr_FR/LC_MESSAGES/djangojs.mo +0 -0
  271. game/locale/fr_FR/LC_MESSAGES/djangojs.po +0 -739
  272. game/locale/gu_IN/LC_MESSAGES/django.mo +0 -0
  273. game/locale/gu_IN/LC_MESSAGES/django.po +0 -405
  274. game/locale/gu_IN/LC_MESSAGES/djangojs.mo +0 -0
  275. game/locale/gu_IN/LC_MESSAGES/djangojs.po +0 -739
  276. game/locale/hi_IN/LC_MESSAGES/django.mo +0 -0
  277. game/locale/hi_IN/LC_MESSAGES/django.po +0 -405
  278. game/locale/hi_IN/LC_MESSAGES/djangojs.mo +0 -0
  279. game/locale/hi_IN/LC_MESSAGES/djangojs.po +0 -739
  280. game/locale/id_ID/LC_MESSAGES/django.mo +0 -0
  281. game/locale/id_ID/LC_MESSAGES/django.po +0 -405
  282. game/locale/id_ID/LC_MESSAGES/djangojs.mo +0 -0
  283. game/locale/id_ID/LC_MESSAGES/djangojs.po +0 -738
  284. game/locale/it_IT/LC_MESSAGES/django.mo +0 -0
  285. game/locale/it_IT/LC_MESSAGES/django.po +0 -405
  286. game/locale/it_IT/LC_MESSAGES/djangojs.mo +0 -0
  287. game/locale/it_IT/LC_MESSAGES/djangojs.po +0 -739
  288. game/locale/ja_JP/LC_MESSAGES/django.mo +0 -0
  289. game/locale/ja_JP/LC_MESSAGES/django.po +0 -405
  290. game/locale/ja_JP/LC_MESSAGES/djangojs.mo +0 -0
  291. game/locale/ja_JP/LC_MESSAGES/djangojs.po +0 -738
  292. game/locale/lol_US/LC_MESSAGES/django.mo +0 -0
  293. game/locale/lol_US/LC_MESSAGES/django.po +0 -405
  294. game/locale/lol_US/LC_MESSAGES/djangojs.mo +0 -0
  295. game/locale/lol_US/LC_MESSAGES/djangojs.po +0 -739
  296. game/locale/nb_NO/LC_MESSAGES/django.mo +0 -0
  297. game/locale/nb_NO/LC_MESSAGES/django.po +0 -405
  298. game/locale/nb_NO/LC_MESSAGES/djangojs.mo +0 -0
  299. game/locale/nb_NO/LC_MESSAGES/djangojs.po +0 -739
  300. game/locale/nl_NL/LC_MESSAGES/django.mo +0 -0
  301. game/locale/nl_NL/LC_MESSAGES/django.po +0 -405
  302. game/locale/nl_NL/LC_MESSAGES/djangojs.mo +0 -0
  303. game/locale/nl_NL/LC_MESSAGES/djangojs.po +0 -739
  304. game/locale/pl_PL/LC_MESSAGES/django.mo +0 -0
  305. game/locale/pl_PL/LC_MESSAGES/django.po +0 -405
  306. game/locale/pl_PL/LC_MESSAGES/djangojs.mo +0 -0
  307. game/locale/pl_PL/LC_MESSAGES/djangojs.po +0 -741
  308. game/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
  309. game/locale/pt_BR/LC_MESSAGES/django.po +0 -405
  310. game/locale/pt_BR/LC_MESSAGES/djangojs.mo +0 -0
  311. game/locale/pt_BR/LC_MESSAGES/djangojs.po +0 -739
  312. game/locale/pt_PT/LC_MESSAGES/django.mo +0 -0
  313. game/locale/pt_PT/LC_MESSAGES/django.po +0 -405
  314. game/locale/pt_PT/LC_MESSAGES/djangojs.mo +0 -0
  315. game/locale/pt_PT/LC_MESSAGES/djangojs.po +0 -739
  316. game/locale/ro_RO/LC_MESSAGES/django.mo +0 -0
  317. game/locale/ro_RO/LC_MESSAGES/django.po +0 -405
  318. game/locale/ro_RO/LC_MESSAGES/djangojs.mo +0 -0
  319. game/locale/ro_RO/LC_MESSAGES/djangojs.po +0 -740
  320. game/locale/ru_RU/LC_MESSAGES/django.mo +0 -0
  321. game/locale/ru_RU/LC_MESSAGES/django.po +0 -405
  322. game/locale/ru_RU/LC_MESSAGES/djangojs.mo +0 -0
  323. game/locale/ru_RU/LC_MESSAGES/djangojs.po +0 -741
  324. game/locale/sv_SE/LC_MESSAGES/django.mo +0 -0
  325. game/locale/sv_SE/LC_MESSAGES/django.po +0 -405
  326. game/locale/sv_SE/LC_MESSAGES/djangojs.mo +0 -0
  327. game/locale/sv_SE/LC_MESSAGES/djangojs.po +0 -739
  328. game/locale/tl_PH/LC_MESSAGES/django.mo +0 -0
  329. game/locale/tl_PH/LC_MESSAGES/django.po +0 -405
  330. game/locale/tl_PH/LC_MESSAGES/djangojs.mo +0 -0
  331. game/locale/tl_PH/LC_MESSAGES/djangojs.po +0 -739
  332. game/locale/tlh_AA/LC_MESSAGES/django.mo +0 -0
  333. game/locale/tlh_AA/LC_MESSAGES/django.po +0 -405
  334. game/locale/tlh_AA/LC_MESSAGES/djangojs.mo +0 -0
  335. game/locale/tlh_AA/LC_MESSAGES/djangojs.po +0 -739
  336. game/locale/tr_TR/LC_MESSAGES/django.mo +0 -0
  337. game/locale/tr_TR/LC_MESSAGES/django.po +0 -405
  338. game/locale/tr_TR/LC_MESSAGES/djangojs.mo +0 -0
  339. game/locale/tr_TR/LC_MESSAGES/djangojs.po +0 -740
  340. game/locale/ur_IN/LC_MESSAGES/django.mo +0 -0
  341. game/locale/ur_IN/LC_MESSAGES/django.po +0 -405
  342. game/locale/ur_IN/LC_MESSAGES/djangojs.mo +0 -0
  343. game/locale/ur_IN/LC_MESSAGES/djangojs.po +0 -739
  344. game/locale/ur_PK/LC_MESSAGES/django.mo +0 -0
  345. game/locale/ur_PK/LC_MESSAGES/django.po +0 -405
  346. game/locale/ur_PK/LC_MESSAGES/djangojs.mo +0 -0
  347. game/locale/ur_PK/LC_MESSAGES/djangojs.po +0 -739
  348. game/static/game/image/actions/go.svg +0 -18
  349. game/static/game/image/icons/destination.svg +0 -9
  350. game/static/game/js/pqselect.min.js +0 -9
  351. game/static/game/js/widget-scroller.js +0 -906
  352. rapid_router-5.4.1.dist-info/LICENSE.md +0 -577
  353. rapid_router-5.4.1.dist-info/METADATA +0 -24
  354. {rapid_router-5.4.1.dist-info → rapid_router-7.6.8.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,101 @@
1
+ {% extends 'game/base.html' %}
2
+
3
+ {% load static %}
4
+ {% load i18n %}
5
+ {% load app_tags %}
6
+
7
+ {% block scripts %}
8
+ {{block.super}}
9
+ <script type="text/javascript" src="https://editor-static.raspberrypi.org/releases/v0.29.1/web-component.js"></script>
10
+ <script type="text/javascript" src="{% static 'game/js/editor.js' %}"></script>
11
+
12
+ <script>
13
+ var EPISODE = "{{ worksheet.episode.name|escapejs }}"
14
+ </script>
15
+ {% endblock %}
16
+
17
+ {% block css %}
18
+ {{block.super}}
19
+ <link href="{% static 'game/css/level_selection.css' %}" rel="stylesheet" type="text/css">
20
+ <link href="{% static 'game/css/editor.css' %}" rel="stylesheet" type="text/css">
21
+ {% endblock %}
22
+
23
+ {% block header %}
24
+ <section class="banner">
25
+ {% if user|is_logged_in_as_student or user|is_independent_student %}
26
+ <img class="banner--python-den--image" title="Python Den logo" alt="Python Den logo" src="{% static 'game/image/Python_Den_hero_student.png' %}">
27
+ {% else %}
28
+ <img class="banner--python-den--image" title="Python Den logo" alt="Python Den logo" src="{% static 'game/image/Python_levels_page.svg' %}">
29
+ {% endif %}
30
+ </section>
31
+ {% endblock header %}
32
+
33
+ {% block content %}
34
+ <div class="container">
35
+ <h4 class="text-center">{{worksheet.episode.name}}</h4>
36
+ <p>You can write your code and see its output using the code editor below.</p>
37
+ <p>Next to it, you can view your worksheet - you can't write anything in it, but you can copy and paste from it.</p>
38
+ </div>
39
+
40
+ <div>
41
+ <div class="d-flex align-items-stretch justify-content-between m-5 flex-lg-row flex-md-column flex-sm-column">
42
+ <div class="d-flex align-items-stretch justify-content-center">
43
+ <a href="{% if user|is_independent_student %} {{worksheet.indy_worksheet_link}} {% else %} {{worksheet.student_worksheet_link}} {% endif %}"
44
+ class="button button--level button--icon hidden-md hidden-lg mb-5" target="_blank">
45
+ Worksheet<span class="iconify" data-icon="mdi:open-in-new"></span></a>
46
+ {% if not user|is_logged_in_as_student %}
47
+ <a href="{{worksheet.video_link}}" class="button button--level button--icon hidden-md hidden-lg mb-5 ml-5" target="_blank">
48
+ Video<span class="iconify" data-icon="mdi:open-in-new"></span></a>
49
+ {% endif %}
50
+ </div>
51
+
52
+ <editor-wc
53
+ code="{{starter_code}}"
54
+ use_editor_styles="true">
55
+ </editor-wc>
56
+
57
+ <div class="hidden-sm hidden-xs">
58
+ <div class="d-flex flex-column">
59
+ {% if user|is_logged_in_as_student %}
60
+ <iframe height="500" width="600" src="{{worksheet.student_worksheet_link}}"></iframe>
61
+ {% else %}
62
+ <ul class="nav nav-tabs" role="tablist">
63
+ <li role="presentation" class="active">
64
+ {% if user|is_independent_student %}
65
+ <a href="#worksheet" aria-controls="worksheet" role="tab" data-toggle="tab">Worksheet</a>
66
+ {% else %}
67
+ <a href="#student-worksheet" aria-controls="student_worksheet" role="tab" data-toggle="tab">Student Worksheet</a>
68
+ {% endif %}
69
+ </li>
70
+ {% if user|is_logged_in_as_teacher %}
71
+ <li role="presentation">
72
+ <a href="#worksheet" aria-controls="worksheet" role="tab" data-toggle="tab">Lesson plan</a>
73
+ </li>
74
+ {% endif %}
75
+ <li role="presentation">
76
+ <a href="#video" aria-controls="video" role="tab" data-toggle="tab">Video</a>
77
+ </li>
78
+ </ul>
79
+
80
+ <div class="tab-content">
81
+ {% if user|is_logged_in_as_teacher %}
82
+ <div role="tabpanel" class="tab-pane active" id="student-worksheet">
83
+ <iframe height="500" width="600" src="{{worksheet.student_worksheet_link}}"></iframe>
84
+ </div>
85
+ {% endif %}
86
+ <div role="tabpanel" class="tab-pane {% if user|is_independent_student %} active {% endif %}" id="worksheet">
87
+ <iframe height="500" width="600" src="{% if user|is_independent_student %} {{worksheet.indy_worksheet_link}} {% else %} {{worksheet.lesson_plan_link}} {% endif %}"></iframe>
88
+ </div>
89
+ <div role="tabpanel" class="tab-pane" id="video">
90
+ <video height="500" width="600"
91
+ src="{{worksheet.video_link}}" type="video/mp4" controls></video>
92
+ </div>
93
+ </div>
94
+ {% endif %}
95
+ </div>
96
+ </div>
97
+
98
+ </div>
99
+ </div>
100
+
101
+ {% endblock content %}
@@ -4,24 +4,29 @@
4
4
  {% load game.utils %}
5
5
  {% load app_tags %}
6
6
 
7
- {% block title %}Code for Life - Rapid Router - Scoreboard{% endblock %}
7
+ {% block title %}
8
+ {% if language == "blockly" %}
9
+ Code for Life - Rapid Router - Scoreboard
10
+ {% else %}
11
+ Code for Life - Python Den - Scoreboard
12
+ {% endif %}
13
+ {% endblock %}
8
14
 
9
15
  {% block scripts %}
10
16
  {{block.super}}
11
17
  <script src="{% static 'game/js/jquery.dataTables.min.js' %}"></script>
12
18
  <script src="{% static 'game/js/dataTables.fixedColumns.js' %}"></script>
13
- <script src="{% static 'game/js/widget-scroller.js' %}"></script>
14
- <script src="{% static 'game/js/pqselect.min.js' %}"></script>
15
19
  <script src="{% static 'game/js/jquery.outerhtml.js' %}"></script>
16
20
  <script src="{% static 'game/js/scoreboard.js' %}"></script>
21
+ {% if language == "blockly" %}
22
+ <script src="{% static 'game/js/scoreboardSharedLevels.js' %}"></script>
23
+ {% endif %}
17
24
  {% endblock %}
18
25
 
19
26
  {% block css %}
20
27
  {{block.super}}
21
28
  <link href="https://code.jquery.com/ui/1.13.1/themes/base/jquery-ui.css" rel="stylesheet" type="text/css">
22
29
  <link href="{% static 'game/css/scoreboard.css' %}" rel="stylesheet" type="text/css">
23
- <link href="{% static 'game/css/pqselect.min.css' %}" rel="stylesheet" type="text/css">
24
- <link href="{% static 'game/css/pqselect.multiselect.css' %}" rel="stylesheet" type="text/css">
25
30
  <link href="{% static 'game/css/jquery.dataTables.css' %}" rel="stylesheet" type="text/css">
26
31
  <link href="{% static 'game/css/dataTables.fixedColumns.css' %}" rel="stylesheet" type="text/css">
27
32
  <link href="{% static 'game/css/dataTables.jqueryui.css' %}" rel="stylesheet" type="text/css">
@@ -31,9 +36,21 @@
31
36
  {% endblock %}
32
37
 
33
38
  {% block header %}
34
- <section class="banner banner--rapid-router">
35
- <img title="Rapid Router logo" alt="Rapid Router logo" src="{% static 'common/img/RR_logo.svg' %}">
36
- </section>
39
+ {% if language == "blockly" %}
40
+ <section class="banner banner--rapid-router">
41
+ <img title="Rapid Router logo" alt="Rapid Router logo" src="{% static 'common/img/RR_logo.svg' %}">
42
+ </section>
43
+ {% else %}
44
+ <section class="banner">
45
+ {% if user|is_logged_in_as_student or user|is_independent_student %}
46
+ <img class="banner--python-den--image" title="Python Den logo"
47
+ alt="Python Den logo" src="{% static 'game/image/Python_Den_hero_student.png' %}">
48
+ {% else %}
49
+ <img class="banner--python-den--image" title="Python Den logo"
50
+ alt="Python Den logo" src="{% static 'game/image/Python_levels_page.svg' %}">
51
+ {% endif %}
52
+ </section>
53
+ {% endif %}
37
54
  {% endblock header %}
38
55
 
39
56
  {% block nav_ocargo_scoreboard %}
@@ -150,22 +167,22 @@
150
167
  </tr>
151
168
  </thead>
152
169
  {% for student in student_data %}
153
- {% ifnotequal student.name user.first_name %}
170
+ {% if student.name != user.first_name %}
154
171
  <tr>
155
172
  {% else %}
156
173
  <tr class="current-student">
157
- {% endifnotequal %}
174
+ {% endif %}
158
175
  <td class="fixed-width">{{ student.class_field }}</td>
159
176
  <td class="fixed-width">{{ student.name }}</td>
160
177
  <td>{{ student.completed }}</td>
161
178
  <td>{{ student.total_time }}</td>
162
179
  {% for level_id, level_score in student.level_scores.items %}
163
180
  {% if level_score.full_score %}
164
- {% ifnotequal student.name user.first_name %}
181
+ {% if student.name != user.first_name %}
165
182
  <td class="text-center scoreboard--completed">
166
183
  {% else %}
167
184
  <td class="text-center scoreboard--completed-secondary">
168
- {% endifnotequal %}
185
+ {% endif %}
169
186
  <div title="{{ level_score.score }}" class="d-flex justify-content-center">
170
187
  <span class="iconify" data-icon="mdi:star"></span>
171
188
  </div>
@@ -181,9 +198,9 @@
181
198
  {% endif %}
182
199
  {% endfor %}
183
200
  {% if user|is_logged_in_as_teacher %}
184
- {% if student.percentage_complete > 75 %}
201
+ {% if student.success_rate > 75 %}
185
202
  <td class="scoreboard--top-performer">
186
- {% elif student.percentage_complete < 33 %}
203
+ {% elif student.success_rate < 33 %}
187
204
  <td class="scoreboard--started">
188
205
  {% else %}
189
206
  <td class="scoreboard--medium-performer">
@@ -196,66 +213,72 @@
196
213
  {% endfor %}
197
214
  </table>
198
215
  {% else %}
199
- No data.
216
+ <p>No data.</p>
200
217
  {% endif %}
201
218
  </div>
202
219
  </div>
203
220
 
204
- <div class="container">
221
+ {% if language == "blockly" %}
222
+ <div class="container">
205
223
 
206
- <h5>Shared levels</h5>
207
- {% if user|is_logged_in_as_teacher %}
208
- <p>The shared levels table displays levels that have been shared and then played by others.
209
- You can moderate which levels are shared on the <a href="{% url 'level_moderation' %}">moderation page</a>.</p>
210
- {% endif %}
224
+ <h5>Shared levels</h5>
225
+ {% if user|is_logged_in_as_teacher %}
226
+ <p>The shared levels table displays levels that have been shared and then played by others.
227
+ You can moderate which levels are shared on the <a href="{% url 'level_moderation' %}">moderation page</a>.</p>
228
+ {% endif %}
211
229
 
212
- <div class="background tableWrapper" id="tableWrapper">
213
- <div class="dataTables_info" role="status" aria-live="polite"></div>
214
- <table id="sharedLevelsTable" class="display cell-border wide header-primary data-primary">
215
- <thead>
216
- <tr>
217
- {% for shared_header in shared_headers %}
218
- <th class="fixed-width">{{ shared_header }}</th>
219
- {% endfor %}
220
- {% for shared_level_header in shared_level_headers %}
221
- <th class="no-sort text-center">{{ shared_level_header }}</th>
222
- {% endfor %}
223
- </tr>
224
- </thead>
225
- {% for student in shared_student_data %}
226
- {% ifnotequal student.name user.first_name %}
227
- <tr>
228
- {% else %}
229
- <tr class="current-student">
230
- {% endifnotequal %}
231
- <td class="fixed-width">{{ student.class_field }}</td>
232
- <td class="fixed-width">{{ student.name }}</td>
233
- {% for level_id, level_score in student.level_scores.items %}
234
- {% if level_score.full_score %}
235
- {% ifnotequal student.name user.first_name %}
236
- <td class="text-center scoreboard--completed">
237
- {% else %}
238
- <td class="text-center scoreboard--completed-secondary">
239
- {% endifnotequal %}
240
- <div title="{{ level_score.score }}" class="d-flex justify-content-center">
241
- <span class="iconify" data-icon="mdi:star"></span>
242
- </div>
243
- </td>
244
- {% elif level_score.is_low_attempt %}
245
- {% if user|is_logged_in_as_teacher %}
246
- <td class="text-center scoreboard--started">{{ level_score.score }}</td>
247
- {% else %}
248
- <td class="text-center">{{ level_score.score }}</td>
249
- {% endif %}
230
+ <div class="background tableWrapper" id="tableWrapper">
231
+ {% if shared_student_data %}
232
+ <div class="dataTables_info" role="status" aria-live="polite"></div>
233
+ <table id="sharedLevelsTable" class="display cell-border wide header-primary data-primary">
234
+ <thead>
235
+ <tr>
236
+ {% for shared_header in shared_headers %}
237
+ <th class="fixed-width">{{ shared_header }}</th>
238
+ {% endfor %}
239
+ {% for shared_level_header in shared_level_headers %}
240
+ <th class="no-sort text-center">{{ shared_level_header }}</th>
241
+ {% endfor %}
242
+ </tr>
243
+ </thead>
244
+ {% for student in shared_student_data %}
245
+ {% if student.name != user.first_name %}
246
+ <tr>
250
247
  {% else %}
251
- <td class="text-center">{{ level_score.score }}</td>
248
+ <tr class="current-student">
252
249
  {% endif %}
250
+ <td class="fixed-width">{{ student.class_field }}</td>
251
+ <td class="fixed-width">{{ student.name }}</td>
252
+ {% for level_id, level_score in student.level_scores.items %}
253
+ {% if level_score.full_score %}
254
+ {% if student.name != user.first_name %}
255
+ <td class="text-center scoreboard--completed">
256
+ {% else %}
257
+ <td class="text-center scoreboard--completed-secondary">
258
+ {% endif %}
259
+ <div title="{{ level_score.score }}" class="d-flex justify-content-center">
260
+ <span class="iconify" data-icon="mdi:star"></span>
261
+ </div>
262
+ </td>
263
+ {% elif level_score.is_low_attempt %}
264
+ {% if user|is_logged_in_as_teacher %}
265
+ <td class="text-center scoreboard--started">{{ level_score.score }}</td>
266
+ {% else %}
267
+ <td class="text-center">{{ level_score.score }}</td>
268
+ {% endif %}
269
+ {% else %}
270
+ <td class="text-center">{{ level_score.score }}</td>
271
+ {% endif %}
272
+ {% endfor %}
273
+ </tr>
253
274
  {% endfor %}
254
- </tr>
255
- {% endfor %}
256
- </table>
275
+ </table>
276
+ {% else %}
277
+ <p>No data.</p>
278
+ {% endif %}
279
+ </div>
257
280
  </div>
258
- </div>
281
+ {% endif %}
259
282
 
260
283
  {% if user|is_logged_in_as_teacher %}
261
284
  <div class="container">
@@ -282,7 +305,7 @@
282
305
  {% endfor %}
283
306
  </table>
284
307
  {% else %}
285
- No data.
308
+ <p>No data.</p>
286
309
  {% endif %}
287
310
  </div>
288
311
  </div>