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
@@ -1,5 +1,4 @@
1
1
  {% extends 'game/basenonav.html' %}
2
- {% load i18n %}
3
2
  {% load static %}
4
3
  {% load app_tags %}
5
4
  {% load game.utils %}
@@ -7,113 +6,138 @@
7
6
  {% block title %}Code for Life - Rapid Router - Create{% endblock %}
8
7
 
9
8
  {% block head %}
10
- <meta name="viewport" content="user-scalable=no" />
11
- {% include 'game/crowdin.html' %}
9
+ <meta name="viewport" content="user-scalable=no" />
10
+ {% include 'game/crowdin.html' %}
12
11
  {% endblock %}
13
12
 
14
13
  {% block scripts %}
15
14
  {{block.super}}
16
- <script>
17
- var COW_LEVELS_ENABLED = {{cow_level_enabled|booltojs}};
18
- var NIGHT_MODE_FEATURE_ENABLED = {{night_mode_feature_enabled}};
19
- {% if level %}
20
- var LEVEL = {{ level }};
21
- {% else %}
22
- var LEVEL = null;
23
- {% endif %}
24
- </script>
25
- <script src="{% static "game/js/utils.js" %}"></script>
26
- <script src="{% static "game/js/mobile-detect.min.js" %}"></script>
27
- <script src="{% static "game/js/raphael.js" %}"></script>
28
- <script src="{% static 'game/js/drawingConstants.js' %}"></script>
29
- <script src="{% static 'game/js/character.js' %}"></script>
30
- <script src="{% static "game/js/drawing.js" %}"></script>
31
-
32
- <script type="text/javascript" src="{% static 'game/js/blockly/blockly_compressed.js' %}"></script>
33
- <script type="text/javascript" src="{% static 'game/js/blockly/blocks_compressed.js' %}"></script>
34
- <script type="text/javascript" src="{% static 'game/js/blockly/msg/js/en.js' %}"></script>
35
- <script type="text/javascript" src="{% static 'game/js/mobile-detect.min.js' %}"></script>
36
-
37
- <script type="text/javascript" src="{% static 'game/js/blocklyCustomBlocks.js' %}"></script>
38
- <script type="text/javascript" src="{% static 'game/js/blocklyControl.js' %}"></script>
39
- <script type="text/javascript" src="{% static 'game/js/blocklyMessages.js' %}"></script>
40
-
41
- <script src="/static/game/js/tab.js"></script>
42
- <script src="/static/game/js/messages.js"></script>
43
- <script src="/static/game/js/saving.js"></script>
44
- <script src="/static/game/js/sharing.js"></script>
45
- <script src="/static/game/js/level_editor/level_save_state.js"></script>
46
- <script src="/static/game/js/level_editor/owned_levels.js"></script>
47
- <script src="/static/game/js/level_editor.js"></script>
48
- <script src="/static/game/js/coordinate.js"></script>
49
- <script src="/static/game/js/node.js"></script>
50
- <script src="/static/game/js/map.js"></script>
51
- <script src="/static/game/js/pathFinder.js"></script>
52
- <script src="/static/game/js/trafficLight.js"></script>
53
- {% if cow_level_enabled %}<script src="/static/game/js/cow.js"></script>{% endif %}
54
- <script src="/static/game/js/destination.js"></script>
55
-
56
- <script>
57
- var BLOCKS = {{ blocks | safe}};
58
- var THEMES = [];
59
- var CHARACTER_NAME = 'Van';
60
-
61
- function initGlobals() {
62
- var themes = [];
63
- {% for theme in themes %}
64
- var name = "{{theme.name}}";
65
- themes.push({
66
- "name": name,
67
- "id": {{theme.id}},
68
- "border": "{{theme.border}}",
69
- "background": "{{theme.background}}",
70
- "selected": "{{theme.selected}}"
15
+ <script>
16
+ var COW_LEVELS_ENABLED = {{ cow_level_enabled| booltojs}};
17
+ var NIGHT_MODE_FEATURE_ENABLED = {{ night_mode_feature_enabled }};
18
+ {% if level %}
19
+ var LEVEL = {{ level }};
20
+ {% else %}
21
+ var LEVEL = null
22
+ {% endif %}
23
+ </script>
24
+ <script src="{% static 'game/js/utils.js' %}"></script>
25
+ <script src="{% static 'game/js/mobile-detect.min.js' %}"></script>
26
+ <script src="{% static 'game/js/raphael.js' %}"></script>
27
+ <script src="{% static 'game/js/drawingConstants.js' %}"></script>
28
+ <script src="{% static 'game/js/character.js' %}"></script>
29
+ <script src="{% static 'game/js/drawing.js' %}"></script>
30
+
31
+ <script type="text/javascript" src="{% static 'game/js/blockly/blockly_compressed.js' %}"></script>
32
+ <script type="text/javascript" src="{% static 'game/js/blockly/blocks_compressed.js' %}"></script>
33
+ <script type="text/javascript" src="{% static 'game/js/blockly/msg/js/en.js' %}"></script>
34
+ <script type="text/javascript" src="{% static 'game/js/mobile-detect.min.js' %}"></script>
35
+
36
+ <script type="text/javascript" src="{% static 'game/js/blocklyCustomBlocks.js' %}"></script>
37
+ <script type="text/javascript" src="{% static 'game/js/blocklyControl.js' %}"></script>
38
+ <script type="text/javascript" src="{% static 'game/js/blocklyMessages.js' %}"></script>
39
+
40
+ <script src="/static/game/js/tab.js"></script>
41
+ <script src="/static/game/js/messages.js"></script>
42
+ <script src="/static/game/js/saving.js"></script>
43
+ <script src="/static/game/js/sharing.js"></script>
44
+ <script src="/static/game/js/level_editor/level_save_state.js"></script>
45
+ <script src="/static/game/js/level_editor/owned_levels.js"></script>
46
+ <script src="/static/game/js/level_editor.js"></script>
47
+ <script src="/static/game/js/coordinate.js"></script>
48
+ <script src="/static/game/js/node.js"></script>
49
+ <script src="/static/game/js/map.js"></script>
50
+ <script src="/static/game/js/pathFinder.js"></script>
51
+ <script src="/static/game/js/trafficLight.js"></script>
52
+ {% if cow_level_enabled %}
53
+ <script src="/static/game/js/cow.js"></script>{% endif %}
54
+ <script src="/static/game/js/destination.js"></script>
55
+
56
+ <script>
57
+ var BLOCKS = {{ blocks | safe}};
58
+ var THEMES = []
59
+ var CHARACTER_NAME = 'Van'
60
+
61
+ function initGlobals() {
62
+ var themes = []
63
+ {% for theme in themes %}
64
+ var name = "{{theme.name}}"
65
+ themes.push({
66
+ "name": name,
67
+ "id": {{ theme.id }},
68
+ "border": "{{theme.border}}",
69
+ "background": "{{theme.background}}",
70
+ "selected": "{{theme.selected}}"
71
71
  });
72
- {% endfor %}
73
-
74
- var decor = [];
75
- {% for dec in decor %}
76
- decor.push({
77
- "id":"{{dec.id}}",
78
- "name":"{{dec.name}}",
79
- "url": ocargo.Drawing.raphaelImageDir + "{{dec.url}}",
80
- "width":"{{dec.width}}",
81
- "height":"{{dec.height}}",
82
- "theme_name":"{{dec.theme.name}}",
83
- "z_index":"{{ dec.z_index }}"
84
- });
85
- {% endfor %}
86
-
87
- for(var i = 0; i < themes.length; i++) {
88
- var theme = themes[i];
89
- THEMES[theme.name] = theme;
90
- THEMES[theme.name].decor = {};
91
- }
92
-
93
- for(var i = 0; i < decor.length; i++) {
94
- var themeDecor = THEMES[decor[i].theme_name].decor;
95
- themeDecor[decor[i].name] = decor[i];
96
- }
97
-
98
- CHARACTERS = [];
99
- {% for char in characters %}
100
- CHARACTERS['{{char.id}}'] = {
101
- id: '{{char.id}}',
102
- name: '{{char.name}}',
103
- image: '{% static "game/image/"|add:char.en_face %}'
104
- };
105
- {% endfor %}
72
+ {% endfor %}
73
+
74
+ var decor = []
75
+ {% for dec in decor %}
76
+ decor.push({
77
+ "id": "{{dec.id}}",
78
+ "name": "{{dec.name}}",
79
+ "url": ocargo.Drawing.raphaelImageDir + "{{dec.url}}",
80
+ "width": "{{dec.width}}",
81
+ "height": "{{dec.height}}",
82
+ "theme_name": "{{dec.theme.name}}",
83
+ "z_index": "{{ dec.z_index }}"
84
+ })
85
+ {% endfor %}
86
+
87
+ for (var i = 0; i < themes.length; i++) {
88
+ var theme = themes[i]
89
+ THEMES[theme.name] = theme
90
+ THEMES[theme.name].decor = {}
91
+ }
92
+
93
+ for (var i = 0; i < decor.length; i++) {
94
+ var themeDecor = THEMES[decor[i].theme_name].decor
95
+ themeDecor[decor[i].name] = decor[i]
96
+ }
97
+
98
+ CHARACTERS = []
99
+ {% for char in characters %}
100
+ CHARACTERS['{{char.id}}'] = {
101
+ id: '{{char.id}}',
102
+ name: '{{char.name}}',
103
+ image: '{% static "game/image/"|add:char.en_face %}'
104
+ }
105
+ {% endfor %}
106
+ }
107
+
108
+ initGlobals();
109
+ </script>
110
+ <script>
111
+ document.addEventListener('DOMContentLoaded', function () {
112
+ const selectElement = document.getElementById('character_select')
113
+ const labelElement = document.getElementById('max_resource_label')
114
+
115
+ const labelMap = {
116
+ 'Van': 'Max fuel:',
117
+ 'Electric van': 'Max battery:',
106
118
  }
107
119
 
108
- initGlobals();
109
- </script>
120
+ function updateResourceLabel() {
121
+ const selectedOption = selectElement.options[selectElement.selectedIndex]
122
+ const charName = selectedOption.textContent.trim()
123
+
124
+ labelElement.textContent = labelMap[charName] || "Max moves:"
125
+ }
126
+
127
+ if (selectElement) {
128
+ selectElement.addEventListener('change', updateResourceLabel)
129
+ updateResourceLabel()
130
+ }
131
+ });
132
+ </script>
133
+
110
134
  {% endblock %}
111
135
 
112
136
  {% block css %}
113
137
  {{ block.super }}
114
- <link href="{% static "game/css/game_screen.css" %}" rel="stylesheet" type="text/css">
115
- <link href="{% static "game/css/level_share.css" %}" rel="stylesheet" type="text/css">
116
- <link href="{% static "game/css/level_editor.css" %}" rel="stylesheet" type="text/css">
138
+ <link href="{% static 'game/css/game_screen.css' %}" rel="stylesheet" type="text/css">
139
+ <link href="{% static 'game/css/level_share.css' %}" rel="stylesheet" type="text/css">
140
+ <link href="{% static 'game/css/level_editor.css' %}" rel="stylesheet" type="text/css">
117
141
  {% endblock %}
118
142
 
119
143
  {% block content %}
@@ -130,18 +154,18 @@
130
154
  <div id="tabs">
131
155
 
132
156
  <div id="currentTool" class="mode_panel">
133
- <img id="currentToolIcon" src="{% static "game/image/icons/delete_road.svg" %}" >
157
+ <img id="currentToolIcon" src="{% static 'game/image/icons/delete_road.svg' %}">
134
158
  <br>
135
- <span id="currentToolText">{% trans "Delete Road" %}</span>
159
+ <span id="currentToolText" style="font-size: 14px;">Delete Road</span>
136
160
  </div>
137
161
 
138
162
  <br style="clear:both">
139
163
 
140
- <div id="play_tab" class="tab">
164
+ <div id="play_tab" class="tab">
141
165
  <input type="radio" name="tabs" id="play_radio">
142
166
  <label for="play_radio">
143
167
  <img src='{% static "game/image/icons/play.svg" %}'>
144
- <span>{% trans "Play" %}</span>
168
+ <span>Play</span>
145
169
  </label>
146
170
  </div>
147
171
 
@@ -149,49 +173,65 @@
149
173
  <input type="radio" name="tabs" id="play_night_radio">
150
174
  <label for="play_night_radio">
151
175
  <img src='{% static "game/image/icons/play.svg" %}'>
152
- <span>{% trans "Play Night" %}</span>
176
+ <span>Play Night</span>
153
177
  </label>
154
178
  </div>
155
179
 
156
180
  <div class="tab_break"></div>
157
181
 
158
- <div id="map_tab" class="tab selectable">
182
+ <div id="map_tab" class="tab selectable">
159
183
  <input type="radio" name="tabs" id="map_radio">
160
184
  <label for="map_radio">
161
185
  <img src='{% static "game/image/icons/map.svg" %}'>
162
- <span>{% trans "Map" %}</span>
186
+ <span>Map</span>
163
187
  </label>
164
188
  </div>
165
189
 
166
- <div id="scenery_tab" class="tab selectable">
190
+ <div id="scenery_tab" class="tab selectable">
167
191
  <input type="radio" name="tabs" id="scenery_radio">
168
192
  <label for="scenery_radio">
169
193
  <img src='{% static "game/image/icons/decor.svg" %}'>
170
- <span>{% trans "Scenery" %}</span>
194
+ <span>Scenery</span>
171
195
  </label>
172
196
  </div>
173
197
 
174
- <div id="character_tab" class="tab selectable">
198
+ <div id="character_tab" class="tab selectable">
175
199
  <input type="radio" name="tabs" id="character_radio">
176
200
  <label for="character_radio">
177
201
  <img src='{% static "game/image/icons/character.svg" %}'>
178
- <span>{% trans "Character" %}</span>
202
+ <span>Character</span>
179
203
  </label>
180
204
  </div>
181
205
 
182
- <div id="blocks_tab" class="tab selectable">
206
+ <div id="blocks_tab" class="tab selectable">
183
207
  <input type="radio" name="tabs" id="blocks_radio">
184
208
  <label for="blocks_radio">
185
209
  <img src='{% static "game/image/icons/blockly.svg" %}'>
186
- <span>{% trans "Code" %}</span>
210
+ <span>Code</span>
187
211
  </label>
188
212
  </div>
189
213
 
190
- <div id="random_tab" class="tab selectable">
214
+ <div id="random_tab" class="tab selectable">
191
215
  <input type="radio" name="tabs" id="random_radio">
192
216
  <label for="random_radio">
193
217
  <img src='{% static "game/image/icons/random.svg" %}'>
194
- <span>{% trans "Random" %}</span>
218
+ <span>Random</span>
219
+ </label>
220
+ </div>
221
+
222
+ <div id="description_tab" class="tab selectable">
223
+ <input type="radio" name="tabs" id="description_radio">
224
+ <label for="description_radio">
225
+ <img src='{% static "game/image/icons/description.svg" %}'>
226
+ <span>Description</span>
227
+ </label>
228
+ </div>
229
+
230
+ <div id="hint_tab" class="tab selectable">
231
+ <input type="radio" name="tabs" id="hint_radio">
232
+ <label for="hint_radio">
233
+ <img src='{% static "game/image/icons/hint.svg" %}'>
234
+ <span>Hint</span>
195
235
  </label>
196
236
  </div>
197
237
 
@@ -201,7 +241,7 @@
201
241
  <input type="radio" name="tabs" id="load_radio">
202
242
  <label for="load_radio">
203
243
  <img src='{% static "game/image/icons/load.svg" %}'>
204
- <span>{% trans "Load" %}</span>
244
+ <span>Load</span>
205
245
  </label>
206
246
  </div>
207
247
 
@@ -209,33 +249,33 @@
209
249
  <input type="radio" name="tabs" id="save_radio">
210
250
  <label for="save_radio">
211
251
  <img src='{% static "game/image/icons/save.svg" %}'>
212
- <span>{% trans "Save" %}</span>
252
+ <span>Save</span>
213
253
  </label>
214
254
  </div>
215
255
 
216
- <div id="share_tab" class="tab selectable">
256
+ <div id="share_tab" class="tab selectable">
217
257
  <input type="radio" name="tabs" id="share_radio">
218
258
  <label for="share_radio">
219
259
  <img src='{% static "game/image/icons/share.svg" %}'>
220
- <span>{% trans "Share" %}</span>
260
+ <span>Share</span>
221
261
  </label>
222
262
  </div>
223
263
 
224
264
  <div class="tab_break"></div>
225
265
 
226
- <div id="help_tab" class="tab selectable">
266
+ <div id="help_tab" class="tab selectable">
227
267
  <input type="radio" name="tabs" id="help_radio">
228
268
  <label for="help_radio">
229
269
  <img src='{% static "game/image/icons/help.svg" %}'>
230
- <span>{% trans "Help" %}</span>
270
+ <span>Help</span>
231
271
  </label>
232
272
  </div>
233
273
 
234
- <div id="quit_tab" class="tab">
274
+ <div id="quit_tab" class="tab">
235
275
  <input type="radio" name="tabs" id="quit_radio">
236
276
  <label for="quit_radio">
237
277
  <img src='{% static "game/image/icons/quit.svg" %}'>
238
- <span>{% trans "Quit" %}</span>
278
+ <span>Quit</span>
239
279
  </label>
240
280
  </div>
241
281
 
@@ -244,51 +284,57 @@
244
284
  <div id='tab_panes_wrapper'>
245
285
  <div id="tab_panes">
246
286
  <div id="map_pane" class="tab_pane">
247
- <h2 class="title"><img class="modal_image" src='{% static "game/image/icons/map.svg" %}'>{% trans "Map" %}</h2>
248
- <p> {% trans "Here you can design your level! What sort of road will you make?" %}</p>
287
+ <h2 class="title"><img class="modal_image" src='{% static "game/image/icons/map.svg" %}'>Map
288
+ </h2>
289
+ <p>Here you can design your level! What sort of road will you make?</p>
249
290
 
250
291
  <div class="tab_pane_content_holder">
251
292
  <div class="tab_pane_content">
252
- <div class="input_div">
253
- <span>{% trans "Max fuel:" %}</span>
254
- <input type="number" id="max_fuel">
255
- </div>
293
+
256
294
  <br style="clear:both">
257
295
 
258
296
  <div class="table">
259
297
  <div class="table_row">
260
298
  <div class="table_cell">
261
299
  <button class="mode_panel navigation_button" id="add_road">
262
- <img src="{% static "game/image/icons/add_road.svg" %}"/>
263
- <span>{% trans "Add road" %}</span>
300
+ <img src="{% static "game/image/icons/add_road.svg" %}" />
301
+ <span style="font-size: 14px;">Add road</span>
264
302
  </button>
265
303
  </div>
266
304
  <div class="table_cell">
267
305
  <button class="mode_panel navigation_button" id="delete_road">
268
- <img src="{% static "game/image/icons/delete_road.svg" %}"/>
269
- <span>{% trans "Delete road" %}</span>
306
+ <img src="{% static "game/image/icons/delete_road.svg" %}" />
307
+ <span style="font-size: 14px;">Delete road</span>
270
308
  </button>
271
309
  </div>
272
310
  </div>
273
311
  <div class="table_row">
274
312
  <div class="table_cell">
275
- <button class="mode_panel navigation_button" id="start">
276
- <img src="{% static "game/image/icons/origin.svg" %}"/>
277
- <span>{% trans "Mark start" %}</span>
313
+ <button class="mode_panel navigation_button" id="add_house">
314
+ <img src="{% static "game/image/icons/add_house.svg" %}" />
315
+ <span style="font-size: 14px;">Add house</span>
316
+ </button>
317
+ </div>
318
+ <div class="table_cell">
319
+ <button class="mode_panel navigation_button" id="delete_house">
320
+ <img src="{% static "game/image/icons/delete_house.svg" %}" />
321
+ <span style="font-size: 14px;">Delete house</span>
278
322
  </button>
279
323
  </div>
324
+ </div>
325
+ <div class="table_row">
280
326
  <div class="table_cell">
281
- <button class="mode_panel navigation_button" id="end">
282
- <img src="{% static "game/image/icons/destination.svg" %}"/>
283
- <span>{% trans "Mark end" %}</span>
327
+ <button class="mode_panel navigation_button" id="start">
328
+ <img src="{% static "game/image/icons/origin.svg" %}" />
329
+ <span style="font-size: 14px;">Mark start</span>
284
330
  </button>
285
331
  </div>
286
332
  </div>
287
333
  </div>
288
334
 
289
335
  <button class="navigation_button long_button" id="clear">
290
- <img src="{% static "game/image/icons/clear.svg" %}"/>
291
- <span>{% trans "Clear all" %}</span>
336
+ <img src="{% static "game/image/icons/clear.svg" %}" />
337
+ <span>Clear all</span>
292
338
  </button>
293
339
 
294
340
  {% if user|is_developer %}
@@ -301,15 +347,15 @@
301
347
  </div>
302
348
 
303
349
  <div id="scenery_pane" class="tab_pane">
304
- <h2 class="title"><img class="modal_image" src='{% static "game/image/icons/decor.svg" %}'>{% trans "Scenery" %}</h2>
305
- <p> {% trans "Here you can liven up your level by choosing the theme and adding scenery! Will you create beautiful countryside or a bustling city?" %}</p>
350
+ <h2 class="title"><img class="modal_image" src='{% static "game/image/icons/decor.svg" %}'>Scenery</h2>
351
+ <p>Here you can liven up your level by choosing the theme and adding scenery! Will you create beautiful countryside or a bustling city?</p>
306
352
  <div class="tab_pane_content_holder">
307
353
  <div class="tab_pane_content">
308
354
 
309
355
  <table>
310
356
  <tbody>
311
357
  <tr>
312
- <td>{% trans "Theme:" %}</td>
358
+ <td>Theme:</td>
313
359
  <td colspan=2>
314
360
  <select id="theme_select">
315
361
  {% for theme in themes %}
@@ -319,60 +365,44 @@
319
365
  </td>
320
366
  </tr>
321
367
  <tr>
322
- <td>{% trans "Scenery:" %}</td>
323
- <td><div class="decor_div"><img id="tree1" class="decor_button" src="{{tree1.url}}" width="70"></td>
324
- <td><div class="decor_div"><img id="tree2" class="decor_button" src="{{tree2.url}}" width="70"></div></td>
368
+ <td>Scenery:</td>
369
+ <td>
370
+ <div class="decor_div"><img id="tree1" class="decor_button" src="{{tree1.url}}" width="70">
371
+ </td>
372
+ <td>
373
+ <div class="decor_div"><img id="tree2" class="decor_button" src="{{tree2.url}}" width="70">
374
+ </div>
375
+ </td>
325
376
  </tr>
326
377
  <tr>
327
378
  <td></td>
328
- <td><div class="decor_div"><img id="bush" class="decor_button" src="{{bush.url}}" width="50"></div></td>
329
- <td><div class="decor_div"><img id="pond" class="decor_button" src="{{pond.url}}" width="100"></div></td>
379
+ <td>
380
+ <div class="decor_div"><img id="bush" class="decor_button" src="{{bush.url}}" width="50"></div>
381
+ </td>
382
+ <td>
383
+ <div class="decor_div"><img id="pond" class="decor_button" src="{{pond.url}}" width="100"></div>
384
+ </td>
330
385
  </tr>
331
386
  <tr>
332
- <td>{% trans "Traffic lights:" %}</td>
333
- <td><img id="trafficLightRed" src="{% static "game/image/trafficLight_red.svg" %}" width="80"></td>
334
- <td><img id="trafficLightGreen" src="{% static "game/image/trafficLight_green.svg" %}" width="80"></td>
387
+ <td></td>
388
+ <td>
389
+ <div class="decor_div"><img id="solar_panel" class="decor_button" src="{{solar_panel.url}}"
390
+ width="70" alt="solar panel"></div>
391
+ </td>
392
+ <td></td>
335
393
  </tr>
336
- {% if cow_level_enabled %}
337
394
  <tr>
338
- <td>{% trans "Cows:" %}</td>
339
- <td><img id="cow" src="/static/game/image/Clarice.svg" width="80"></td>
340
- <td>
341
- <button class="navigation_button" id="advanced_cow_options_button">
342
- <img id="advanced_cow_options_button_icon" src="/static/game/image/icons/show.svg"/>
343
- {% trans "Advanced" %}
344
- </button>
395
+ <td>Traffic lights:</td>
396
+ <td><img id="trafficLightRed" src="{% static 'game/image/trafficLight_red.svg' %}" width="80">
397
+ </td>
398
+ <td><img id="trafficLightGreen" src="{% static 'game/image/trafficLight_green.svg' %}" width="80">
345
399
  </td>
346
400
  </tr>
401
+ {% if cow_level_enabled %}
347
402
  <tr>
348
- <td></td>
349
- <td colspan="2">
350
- <div id="cow_advanced_div">
351
- <h3 id="cow_advanced_options_title">{% trans "Advanced options" %}</h3>
352
- <div id="cow_group_div">
353
- <!--<h4>Group:</h4>-->
354
- <div id="cow_group_buttons">
355
- <button class="mode_panel navigation_button" id="remove_cow_group_button">
356
- <img src="/static/game/image/icons/clear.svg"/>
357
- </button>
358
- <button class="mode_panel navigation_button" id="add_cow_group_button">
359
- <img src="/static/game/image/icons/add.svg"/>
360
- </button>
361
- </div>
362
- <div id="cow_group_select_div">
363
- <select id="cow_group_select"></select>
364
- </div>
365
- <div id="cow_type_select_div">
366
- <select id="cow_type_select"></select>
367
- </div>
368
- <div style="clear: both;"></div>
369
- <h4>{% trans "How many cows should appear for this group?" %}</h4>
370
- <div id="min_max_cow_div">
371
- <label for="min_cows_spinner">{% trans "Min:" %}</label><input name="Min" class="spinner" id="min_cows_spinner" readonly>
372
- <label for="max_cows_spinner">{% trans "Max:" %}</label><input name="Max" class="spinner" id="max_cows_spinner" readonly>
373
- </div>
374
- </div>
375
- </div>
403
+ <td id="animals_label">Cows:</td>
404
+ <td><img id="cow" src="/static/game/image/Clarice.svg" width="80"></td>
405
+ <td>
376
406
  </td>
377
407
  </tr>
378
408
  {% endif %}
@@ -386,15 +416,19 @@
386
416
  </div>
387
417
 
388
418
  <div id="character_pane" class="tab_pane">
389
- <h2 class="title"><img class="modal_image" src='{% static "game/image/icons/character.svg" %}'>{% trans "Character" %}</h2>
390
- <p> {% trans "Here you can choose your character. Who will you play as?" %}</p>
419
+ <h2 class="title"><img class="modal_image" src='{% static "game/image/icons/character.svg" %}'>Character</h2>
420
+ <p>Here you can choose your character. Who will you play as?</p>
391
421
  <div class="tab_pane_content_holder">
392
422
  <div class="tab_pane_content">
393
- <p>{% trans "Character:" %}
423
+ <div class="input_div">
424
+ <span id="max_resource_label"></span>
425
+ <input type="number" id="max_fuel">
426
+ </div>
427
+ <p>Character:
394
428
  <select id="character_select">
395
- {% for char in characters %}
429
+ {% for char in characters %}
396
430
  <option value='{{char.id}}'> {{char.name}} </option>
397
- {% endfor %}
431
+ {% endfor %}
398
432
  </select>
399
433
  </p>
400
434
  <img id="character_image" src="">
@@ -403,19 +437,19 @@
403
437
  </div>
404
438
 
405
439
  <div id="blocks_pane" class="tab_pane">
406
- <h2 class="title"><img class="modal_image" src='{% static "game/image/icons/blockly.svg" %}'>{% trans "Code" %}</h2>
407
- <p> {% trans "Here you can select the code you can use while playing your new level!" %} </p>
440
+ <h2 class="title"><img class="modal_image" src='{% static "game/image/icons/blockly.svg" %}'>Code</h2>
441
+ <p>Here you can select the code you can use while playing your new level! </p>
408
442
  <div class="tab_pane_content_holder">
409
443
  <div class="tab_pane_content">
410
444
  <div id="block_table">
411
445
 
412
446
  <div id="language_div" class="input_div">
413
- <span>{% trans "Language:" %}</span>
447
+ <span>Language:</span>
414
448
  <select id="language_select">
415
- <option value="blockly">{% trans "Blockly" %}</option>
416
- <option value="blocklyWithPythonView">{% trans "Blockly With Python View" %}</option>
417
- <option value="python">{% trans "Python" %}</option>
418
- <option value="both">{% trans "Both" %}</option>
449
+ <option value="blockly">Blockly</option>
450
+ <option value="blocklyWithPythonView">Blockly With Python View</option>
451
+ <option value="python">Python</option>
452
+ <option value="both">Both</option>
419
453
  </select>
420
454
  </div>
421
455
 
@@ -425,29 +459,29 @@
425
459
  <input type="checkbox" id="select_all_checkbox" class="block_checkbox">
426
460
  </div>
427
461
  <div>
428
- <label id="select_all_label" for="select_all_checkbox"> {% trans "Select all" %}</label>
462
+ <label id="select_all_label" for="select_all_checkbox">Select all</label>
429
463
  </div>
430
464
  </div>
431
465
 
432
466
  {% for block in blocks %}
433
- <div class="table_row">
434
- <div class="table_cell">
435
- <input type="checkbox" id="{{block}}_checkbox" class="block_checkbox" unchecked>
436
- </div>
437
- <div id="{{block}}_image" class="table_cell unselectable"></div>
438
- <select id="{{block}}_number" class="block_number" class="table_cell unselectable">
439
- <option value="infinity">&infin;</option>
440
- <option value="1">1</option>
441
- <option value="2">2</option>
442
- <option value="3">3</option>
443
- <option value="4">4</option>
444
- <option value="5">5</option>
445
- <option value="6">6</option>
446
- <option value="7">7</option>
447
- <option value="8">8</option>
448
- <option value="9">9</option>
449
- </select>
467
+ <div class="table_row">
468
+ <div class="table_cell">
469
+ <input type="checkbox" id="{{block}}_checkbox" class="block_checkbox" unchecked>
450
470
  </div>
471
+ <div id="{{block}}_image" class="table_cell unselectable"></div>
472
+ <select id="{{block}}_number" class="block_number" class="table_cell unselectable">
473
+ <option value="infinity">&infin;</option>
474
+ <option value="1">1</option>
475
+ <option value="2">2</option>
476
+ <option value="3">3</option>
477
+ <option value="4">4</option>
478
+ <option value="5">5</option>
479
+ <option value="6">6</option>
480
+ <option value="7">7</option>
481
+ <option value="8">8</option>
482
+ <option value="9">9</option>
483
+ </select>
484
+ </div>
451
485
  {% endfor %}
452
486
  </div>
453
487
  </div>
@@ -456,70 +490,113 @@
456
490
  </div>
457
491
 
458
492
  <div id="random_pane" class="tab_pane">
459
- <h2 class="title"><img class="modal_image" src='{% static "game/image/icons/random.svg" %}'>{% trans "Random" %}</h2>
460
- <p> {% trans "Here you can generate a random map. Try changing some of the parameters below and see what you get!" %} </p>
493
+ <h2 class="title"><img class="modal_image" src='{% static "game/image/icons/random.svg" %}'>Random</h2>
494
+ <p>Here you can generate a random map. Try changing some of the parameters below and see what you get!</p>
461
495
  <div class="tab_pane_content_holder">
462
496
  <div class="tab_pane_content">
463
497
  <div class="table">
464
498
  <div class="table_row">
465
- <div class="table_cell field_label"><p>{% trans "Size:" %}</p></div>
466
- <div class="table_cell field_value"><input type="number" id="size" value="20" size="4" min="2" max="40"></div>
499
+ <div class="table_cell field_label">
500
+ <p>Size:</p>
501
+ </div>
502
+ <div class="table_cell field_value"><input type="number" id="size" value="20" size="4" min="2"
503
+ max="40"></div>
467
504
  </div>
468
505
  <div class="table_row">
469
- <div class="table_cell field_label"><p>{% trans "Branchiness:" %}</p></div>
470
- <div class="table_cell field_value"><input type="number" id="branchiness" value="1" size="4" min="0" max="10"></div>
506
+ <div class="table_cell field_label">
507
+ <p>Branchiness:</p>
508
+ </div>
509
+ <div class="table_cell field_value"><input type="number" id="branchiness" value="1" size="4" min="0"
510
+ max="10"></div>
471
511
  </div>
472
512
  <div class="table_row">
473
- <div class="table_cell field_label"><p>{% trans "Loopiness:" %}</p></div>
474
- <div class="table_cell field_value"><input type="number" id="loopiness" value="1" size="4" min="0" max="10"></div>
513
+ <div class="table_cell field_label">
514
+ <p>Loopiness:</p>
515
+ </div>
516
+ <div class="table_cell field_value"><input type="number" id="loopiness" value="1" size="4" min="0"
517
+ max="10"></div>
475
518
  </div>
476
519
  <div class="table_row">
477
- <div class="table_cell field_label"><p>{% trans "Curviness:" %}</p></div>
478
- <div class="table_cell field_value"><input type="number" id="curviness" value="5" size="4" min="0" max="10"></div>
520
+ <div class="table_cell field_label">
521
+ <p>Curviness:</p>
522
+ </div>
523
+ <div class="table_cell field_value"><input type="number" id="curviness" value="5" size="4" min="0"
524
+ max="10"></div>
479
525
  </div>
480
526
  <div class="table_row">
481
- <div class="table_cell field_label"><p>{% trans "Traffic Lights:" %}</p></div>
527
+ <div class="table_cell field_label">
528
+ <p>Traffic Lights:</p>
529
+ </div>
482
530
  <div class="table_cell field_value">
483
531
  <select id="trafficLightsEnabled">
484
- <option value="yes">{% trans "Yes" %}</option>
485
- <option value="no" selected>{% trans "No" %}</option>
532
+ <option value="yes">Yes</option>
533
+ <option value="no" selected>No</option>
486
534
  </select>
487
535
  </div>
488
536
  </div>
489
537
  <div class="table_row">
490
- <div class="table_cell field_label"><p>{% trans "Scenery:" %}</p></div>
538
+ <div class="table_cell field_label">
539
+ <p>Scenery:</p>
540
+ </div>
491
541
  <div class="table_cell field_value">
492
542
  <select id="sceneryEnabled">
493
- <option value="yes">{% trans "Yes" %}</option>
494
- <option value="no" selected>{% trans "No" %}</option>
543
+ <option value="yes">Yes</option>
544
+ <option value="no" selected>No</option>
495
545
  </select>
496
546
  </div>
497
547
  </div>
498
548
  </div>
499
549
  <button class="navigation_button long_button" id="generate">
500
- <img src="{% static "game/image/icons/random.svg" %}">
501
- <span>{% trans "Generate" %}</span>
550
+ <img src="{% static 'game/image/icons/random.svg' %}">
551
+ <span>Generate</span>
502
552
  </button>
503
553
  </div>
504
554
  </div>
505
555
  </div>
506
556
 
557
+ <div id="description_pane" class="tab_pane">
558
+ <h2 class="title"><img class="modal_image" src='{% static "game/image/icons/description.svg" %}'>Description</h2>
559
+ <p>Give this level a subtitle and a description of what to do within this level for your students.</p>
560
+ <p>Students will see this subtitle and description when <b>starting this level</b> so make sure they are <b>useful to the student</b>.</p>
561
+ <div class="tab_pane_content_holder">
562
+ <div class="tab_pane_content">
563
+ <p><b>Subtitle</b><br>What is the subtitle of this level?</p>
564
+ <textarea id="subtitle" rows="4" cols="50"></textarea>
565
+
566
+ <p><b>Description</b><br>What do players have to do to complete this level?</p>
567
+ <textarea id="description" rows="4" cols="50"></textarea>
568
+ </div>
569
+ </div>
570
+ </div>
571
+
572
+ <div id="hint_pane" class="tab_pane">
573
+ <h2 class="title"><img class="modal_image" src='{% static "game/image/icons/hint.svg" %}'>Hint</h2>
574
+ <p>Help out your players by adding hints! Players will have the option to view a hint when they have made an unsuccessful attempt.</p>
575
+ <p>Players can also access hints by clicking the hint button whilst playing.</p>
576
+ <div class="tab_pane_content_holder">
577
+ <div class="tab_pane_content">
578
+ <p><b>Hint</b></p>
579
+ <textarea id="hint" rows="4" cols="50"></textarea>
580
+ </div>
581
+ </div>
582
+ </div>
583
+
507
584
  <div id="load_pane" class="tab_pane">
508
- <h2 class="title"><img class="modal_image" src='{% static "game/image/icons/load.svg" %}'>{% trans "Load" %}</h2>
509
- <p>{% trans "Here you can load in levels created by you and your friends! Select a level in the table and press load." %}</p>
585
+ <h2 class="title"><img class="modal_image" src='{% static "game/image/icons/load.svg" %}'>Load</h2>
586
+ <p>Here you can load in levels created by you and your friends! Select a level in the table and press load.</p>
510
587
 
511
588
  <div class="table_control_div">
512
589
 
513
590
  <div id="does_not_exist">
514
- <p> {% trans "You don't have any levels to load yet. Try saving one!" %} </p>
591
+ <p>You don't have any levels to load yet. Try saving one!</p>
515
592
  </div>
516
593
 
517
594
  <div id="does_exist">
518
595
  <p>
519
- {% trans "Load:" %}
596
+ Load:
520
597
  <select id="load_type_select">
521
- <option value="ownLevels" selected>{% trans "your own levels" %}</option>
522
- <option value="sharedLevels">{% trans "shared levels" %}</option>
598
+ <option value="ownLevels" selected>your own levels</option>
599
+ <option value="sharedLevels">shared levels</option>
523
600
  </select>
524
601
  </p>
525
602
 
@@ -527,8 +604,8 @@
527
604
  <table width='100%' id="loadLevelTableHeader">
528
605
  <thead>
529
606
  <tr>
530
- <th>{% trans "Name" %}</th>
531
- <th>{% trans "Owner" %}</th>
607
+ <th>Name</th>
608
+ <th>Owner</th>
532
609
  </tr>
533
610
  </thead>
534
611
  </table>
@@ -545,29 +622,29 @@
545
622
 
546
623
  <div>
547
624
  <button class="navigation_button long_button" id="deleteLevel">
548
- <img src="{% static "game/image/icons/clear.svg" %}">
549
- <span>{% trans "Delete" %}</span>
625
+ <img src="{% static " game/image/icons/clear.svg" %}">
626
+ <span>Delete</span>
550
627
  </button>
551
628
 
552
629
  <button class="navigation_button long_button" id="loadLevel">
553
- <img src="{% static "game/image/icons/load.svg" %}">
554
- <span>{% trans "Load" %}</span>
630
+ <img src="{% static " game/image/icons/load.svg" %}">
631
+ <span>Load</span>
555
632
  </button>
556
633
  </div>
557
634
  </div>
558
635
 
559
636
  <div id="save_pane" class="tab_pane">
560
- <h2 class="title"><img class="modal_image" src='{% static "game/image/icons/save.svg" %}'>{% trans "Save" %}</h2>
561
- <p>{% trans "Here you can save your new level. Enter a name below and hit save. Alternatively click on an existing level to update it." %}</p>
562
- <p>{% trans "To play your level and be tracked, first <b>Quit</b> the Level Editor and select your level from the 'Levels created by you' section." %}</p>
637
+ <h2 class="title"><img class="modal_image" src='{% static "game/image/icons/save.svg" %}'>Save</h2>
638
+ <p>Here you can save your new level. Enter a name below and hit save. Alternatively click on an existing level to update it.</p>
639
+ <p>To play your level and be tracked, first <b>Quit</b> the Level Editor and select your level from the 'Levels created by you' section.</p>
563
640
 
564
641
  <div class="table_control_div">
565
642
  <div class="scrolling-table-wrapper">
566
643
  <table width='100%' id="saveLevelTableHeader">
567
644
  <thead>
568
645
  <tr>
569
- <th>{% trans "Name" %}</th>
570
- <th>{% trans "Owner" %}</th>
646
+ <th>Name</th>
647
+ <th>Owner</th>
571
648
  </tr>
572
649
  </thead>
573
650
  </table>
@@ -579,48 +656,49 @@
579
656
  </div>
580
657
  <br style="clear:both">
581
658
  <div>
582
- <label>{% trans "Name:" %}</label>
659
+ <label>Name:</label>
583
660
  <input type="text" id="levelNameInput">
584
661
  </div>
585
662
  </div>
586
663
  <br>
587
664
  <br>
588
665
  <button class="navigation_button long_button" id="saveLevel">
589
- <img src="{% static "game/image/icons/save.svg" %}">
590
- <span>{% trans "Save" %}</span>
666
+ <img src="{% static " game/image/icons/save.svg" %}">
667
+ <span>Save</span>
591
668
  </button>
592
669
  </div>
593
670
 
594
671
  <div id="share_pane" class="tab_pane">
595
- <h2 class="title"><img class="modal_image" src='{% static "game/image/icons/share.svg" %}'>{% trans "Share" %}</h2>
672
+ <h2 class="title"><img class="modal_image" src='{% static "game/image/icons/share.svg" %}'>Share</h2>
596
673
 
597
674
  {% if user|get_user_status == 'TEACHER' %}
598
- <p>{% trans "Here you can share your level with your classes or your fellow teachers." %}</p>
675
+ <p>Here you can share your level with your classes or your fellow teachers.</p>
676
+ <p><strong>Admin teachers can already see levels created by you.</strong></p>
599
677
  {% elif user|get_user_status == 'SCHOOL_STUDENT' %}
600
- <p>{% trans "Here you can share your level with your classmates. Try clicking in the Shared column!" %}</p>
678
+ <p>Here you can share your level with your classmates. Try clicking in the Shared column!</p>
601
679
  {% endif %}
602
680
 
603
681
  <div class="table_control_div">
604
682
  {% if user|get_user_status == 'TEACHER' %}
605
- <p>
606
- {% trans "Share with:" %}
607
- <select id="share_type_select">
608
- <option value="classes" selected>{% trans "Classes" %}</option>
609
- <option value="teachers">{% trans "Teachers" %}</option>
610
- </select>
611
- </p>
612
-
613
- <p id="class_selection">
614
- {% trans "Class:" %} <select id="class_select"></select>
615
- </p>
683
+ <p>
684
+ Share with:
685
+ <select id="share_type_select">
686
+ <option value="classes" selected>Classes</option>
687
+ <option value="teachers">Teachers</option>
688
+ </select>
689
+ </p>
690
+
691
+ <p id="class_selection">
692
+ Class: <select id="class_select"></select>
693
+ </p>
616
694
  {% endif %}
617
695
 
618
696
  <div id="shared_levels" class="scrolling-table-wrapper">
619
697
  <table width='100%' id="shareLevelTableHeader">
620
698
  <thead>
621
699
  <tr>
622
- <th>{% trans "Name" %}</th>
623
- <th>{% trans "Shared" %}</th>
700
+ <th>Name</th>
701
+ <th>Shared</th>
624
702
  </tr>
625
703
  </thead>
626
704
  </table>
@@ -633,8 +711,8 @@
633
711
  </div>
634
712
 
635
713
  <button class="navigation_button long_button" id="shareWithAll">
636
- <img src="{% static "game/image/icons/share.svg" %}">
637
- <span>{% trans "Share with all" %}</span>
714
+ <img src="{% static 'game/image/icons/share.svg' %}">
715
+ <span>Share with all</span>
638
716
  </button>
639
717
  </div>
640
718
 
@@ -646,13 +724,13 @@
646
724
  <div id="paper"></div>
647
725
 
648
726
  <div id="trashcanHolder">
649
- <img id="trashcanLidClosed" src="{% static "game/image/trashcan_lid_closed.svg" %}">
650
- <img id="trashcanLidOpen" src="{% static "game/image/trashcan_lid_open.svg" %}">
651
- <img id="trashcan" src="{% static "game/image/trashcan.svg" %}">
727
+ <img id="trashcanLidClosed" src="{% static 'game/image/trashcan_lid_closed.svg' %}">
728
+ <img id="trashcanLidOpen" src="{% static 'game/image/trashcan_lid_open.svg' %}">
729
+ <img id="trashcan" src="{% static 'game/image/trashcan.svg' %}">
652
730
  </div>
653
731
  </div>
654
732
 
655
733
  <div id="blockly"></div>
656
734
  <xml id="blockly_toolbox"></xml>
657
735
 
658
- {% endblock %}
736
+ {% endblock %}