rapid-router 7.6.4__py2.py3-none-any.whl → 7.6.6__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.
game/__init__.py CHANGED
@@ -1 +1 @@
1
- __version__ = "7.6.4"
1
+ __version__ = "7.6.6"
@@ -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:',
118
+ }
119
+
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()
106
130
  }
131
+ });
132
+ </script>
107
133
 
108
- initGlobals();
109
- </script>
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" style="font-size: 14px;">{% 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,49 @@
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>
195
219
  </label>
196
220
  </div>
197
221
 
@@ -199,7 +223,7 @@
199
223
  <input type="radio" name="tabs" id="description_radio">
200
224
  <label for="description_radio">
201
225
  <img src='{% static "game/image/icons/description.svg" %}'>
202
- <span>{% trans "Description" %}</span>
226
+ <span>Description</span>
203
227
  </label>
204
228
  </div>
205
229
 
@@ -207,7 +231,7 @@
207
231
  <input type="radio" name="tabs" id="hint_radio">
208
232
  <label for="hint_radio">
209
233
  <img src='{% static "game/image/icons/hint.svg" %}'>
210
- <span>{% trans "Hint" %}</span>
234
+ <span>Hint</span>
211
235
  </label>
212
236
  </div>
213
237
 
@@ -217,7 +241,7 @@
217
241
  <input type="radio" name="tabs" id="load_radio">
218
242
  <label for="load_radio">
219
243
  <img src='{% static "game/image/icons/load.svg" %}'>
220
- <span>{% trans "Load" %}</span>
244
+ <span>Load</span>
221
245
  </label>
222
246
  </div>
223
247
 
@@ -225,33 +249,33 @@
225
249
  <input type="radio" name="tabs" id="save_radio">
226
250
  <label for="save_radio">
227
251
  <img src='{% static "game/image/icons/save.svg" %}'>
228
- <span>{% trans "Save" %}</span>
252
+ <span>Save</span>
229
253
  </label>
230
254
  </div>
231
255
 
232
- <div id="share_tab" class="tab selectable">
256
+ <div id="share_tab" class="tab selectable">
233
257
  <input type="radio" name="tabs" id="share_radio">
234
258
  <label for="share_radio">
235
259
  <img src='{% static "game/image/icons/share.svg" %}'>
236
- <span>{% trans "Share" %}</span>
260
+ <span>Share</span>
237
261
  </label>
238
262
  </div>
239
263
 
240
264
  <div class="tab_break"></div>
241
265
 
242
- <div id="help_tab" class="tab selectable">
266
+ <div id="help_tab" class="tab selectable">
243
267
  <input type="radio" name="tabs" id="help_radio">
244
268
  <label for="help_radio">
245
269
  <img src='{% static "game/image/icons/help.svg" %}'>
246
- <span>{% trans "Help" %}</span>
270
+ <span>Help</span>
247
271
  </label>
248
272
  </div>
249
273
 
250
- <div id="quit_tab" class="tab">
274
+ <div id="quit_tab" class="tab">
251
275
  <input type="radio" name="tabs" id="quit_radio">
252
276
  <label for="quit_radio">
253
277
  <img src='{% static "game/image/icons/quit.svg" %}'>
254
- <span>{% trans "Quit" %}</span>
278
+ <span>Quit</span>
255
279
  </label>
256
280
  </div>
257
281
 
@@ -260,59 +284,57 @@
260
284
  <div id='tab_panes_wrapper'>
261
285
  <div id="tab_panes">
262
286
  <div id="map_pane" class="tab_pane">
263
- <h2 class="title"><img class="modal_image" src='{% static "game/image/icons/map.svg" %}'>{% trans "Map" %}</h2>
264
- <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>
265
290
 
266
291
  <div class="tab_pane_content_holder">
267
292
  <div class="tab_pane_content">
268
- <div class="input_div">
269
- <span>{% trans "Max fuel:" %}</span>
270
- <input type="number" id="max_fuel">
271
- </div>
293
+
272
294
  <br style="clear:both">
273
295
 
274
296
  <div class="table">
275
297
  <div class="table_row">
276
298
  <div class="table_cell">
277
299
  <button class="mode_panel navigation_button" id="add_road">
278
- <img src="{% static "game/image/icons/add_road.svg" %}"/>
279
- <span style="font-size: 14px;">{% trans "Add road" %}</span>
300
+ <img src="{% static "game/image/icons/add_road.svg" %}" />
301
+ <span style="font-size: 14px;">Add road</span>
280
302
  </button>
281
303
  </div>
282
304
  <div class="table_cell">
283
305
  <button class="mode_panel navigation_button" id="delete_road">
284
- <img src="{% static "game/image/icons/delete_road.svg" %}"/>
285
- <span style="font-size: 14px;">{% trans "Delete road" %}</span>
306
+ <img src="{% static "game/image/icons/delete_road.svg" %}" />
307
+ <span style="font-size: 14px;">Delete road</span>
286
308
  </button>
287
309
  </div>
288
310
  </div>
289
311
  <div class="table_row">
290
312
  <div class="table_cell">
291
313
  <button class="mode_panel navigation_button" id="add_house">
292
- <img src="{% static "game/image/icons/add_house.svg" %}"/>
293
- <span style="font-size: 14px;">{% trans "Add house" %}</span>
314
+ <img src="{% static "game/image/icons/add_house.svg" %}" />
315
+ <span style="font-size: 14px;">Add house</span>
294
316
  </button>
295
317
  </div>
296
318
  <div class="table_cell">
297
319
  <button class="mode_panel navigation_button" id="delete_house">
298
- <img src="{% static "game/image/icons/delete_house.svg" %}"/>
299
- <span style="font-size: 14px;">{% trans "Delete house" %}</span>
320
+ <img src="{% static "game/image/icons/delete_house.svg" %}" />
321
+ <span style="font-size: 14px;">Delete house</span>
300
322
  </button>
301
323
  </div>
302
324
  </div>
303
325
  <div class="table_row">
304
326
  <div class="table_cell">
305
327
  <button class="mode_panel navigation_button" id="start">
306
- <img src="{% static "game/image/icons/origin.svg" %}"/>
307
- <span style="font-size: 14px;">{% trans "Mark start" %}</span>
328
+ <img src="{% static "game/image/icons/origin.svg" %}" />
329
+ <span style="font-size: 14px;">Mark start</span>
308
330
  </button>
309
331
  </div>
310
332
  </div>
311
333
  </div>
312
334
 
313
335
  <button class="navigation_button long_button" id="clear">
314
- <img src="{% static "game/image/icons/clear.svg" %}"/>
315
- <span>{% trans "Clear all" %}</span>
336
+ <img src="{% static "game/image/icons/clear.svg" %}" />
337
+ <span>Clear all</span>
316
338
  </button>
317
339
 
318
340
  {% if user|is_developer %}
@@ -325,15 +347,15 @@
325
347
  </div>
326
348
 
327
349
  <div id="scenery_pane" class="tab_pane">
328
- <h2 class="title"><img class="modal_image" src='{% static "game/image/icons/decor.svg" %}'>{% trans "Scenery" %}</h2>
329
- <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>
330
352
  <div class="tab_pane_content_holder">
331
353
  <div class="tab_pane_content">
332
354
 
333
355
  <table>
334
356
  <tbody>
335
357
  <tr>
336
- <td>{% trans "Theme:" %}</td>
358
+ <td>Theme:</td>
337
359
  <td colspan=2>
338
360
  <select id="theme_select">
339
361
  {% for theme in themes %}
@@ -343,28 +365,42 @@
343
365
  </td>
344
366
  </tr>
345
367
  <tr>
346
- <td>{% trans "Scenery:" %}</td>
347
- <td><div class="decor_div"><img id="tree1" class="decor_button" src="{{tree1.url}}" width="70"></td>
348
- <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>
349
376
  </tr>
350
377
  <tr>
351
378
  <td></td>
352
- <td><div class="decor_div"><img id="bush" class="decor_button" src="{{bush.url}}" width="50"></div></td>
353
- <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>
354
385
  </tr>
355
386
  <tr>
356
387
  <td></td>
357
- <td><div class="decor_div"><img id="solar_panel" class="decor_button" src="{{solar_panel.url}}" width="70" alt="solar panel"></div></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>
358
392
  <td></td>
359
393
  </tr>
360
394
  <tr>
361
- <td>{% trans "Traffic lights:" %}</td>
362
- <td><img id="trafficLightRed" src="{% static 'game/image/trafficLight_red.svg' %}" width="80"></td>
363
- <td><img id="trafficLightGreen" src="{% static 'game/image/trafficLight_green.svg' %}" width="80"></td>
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">
399
+ </td>
364
400
  </tr>
365
401
  {% if cow_level_enabled %}
366
402
  <tr>
367
- <td id="animals_label">{% trans "Cows:" %}</td>
403
+ <td id="animals_label">Cows:</td>
368
404
  <td><img id="cow" src="/static/game/image/Clarice.svg" width="80"></td>
369
405
  <td>
370
406
  </td>
@@ -380,15 +416,19 @@
380
416
  </div>
381
417
 
382
418
  <div id="character_pane" class="tab_pane">
383
- <h2 class="title"><img class="modal_image" src='{% static "game/image/icons/character.svg" %}'>{% trans "Character" %}</h2>
384
- <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>
385
421
  <div class="tab_pane_content_holder">
386
422
  <div class="tab_pane_content">
387
- <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:
388
428
  <select id="character_select">
389
- {% for char in characters %}
429
+ {% for char in characters %}
390
430
  <option value='{{char.id}}'> {{char.name}} </option>
391
- {% endfor %}
431
+ {% endfor %}
392
432
  </select>
393
433
  </p>
394
434
  <img id="character_image" src="">
@@ -397,19 +437,19 @@
397
437
  </div>
398
438
 
399
439
  <div id="blocks_pane" class="tab_pane">
400
- <h2 class="title"><img class="modal_image" src='{% static "game/image/icons/blockly.svg" %}'>{% trans "Code" %}</h2>
401
- <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>
402
442
  <div class="tab_pane_content_holder">
403
443
  <div class="tab_pane_content">
404
444
  <div id="block_table">
405
445
 
406
446
  <div id="language_div" class="input_div">
407
- <span>{% trans "Language:" %}</span>
447
+ <span>Language:</span>
408
448
  <select id="language_select">
409
- <option value="blockly">{% trans "Blockly" %}</option>
410
- <option value="blocklyWithPythonView">{% trans "Blockly With Python View" %}</option>
411
- <option value="python">{% trans "Python" %}</option>
412
- <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>
413
453
  </select>
414
454
  </div>
415
455
 
@@ -419,29 +459,29 @@
419
459
  <input type="checkbox" id="select_all_checkbox" class="block_checkbox">
420
460
  </div>
421
461
  <div>
422
- <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>
423
463
  </div>
424
464
  </div>
425
465
 
426
466
  {% for block in blocks %}
427
- <div class="table_row">
428
- <div class="table_cell">
429
- <input type="checkbox" id="{{block}}_checkbox" class="block_checkbox" unchecked>
430
- </div>
431
- <div id="{{block}}_image" class="table_cell unselectable"></div>
432
- <select id="{{block}}_number" class="block_number" class="table_cell unselectable">
433
- <option value="infinity">&infin;</option>
434
- <option value="1">1</option>
435
- <option value="2">2</option>
436
- <option value="3">3</option>
437
- <option value="4">4</option>
438
- <option value="5">5</option>
439
- <option value="6">6</option>
440
- <option value="7">7</option>
441
- <option value="8">8</option>
442
- <option value="9">9</option>
443
- </select>
467
+ <div class="table_row">
468
+ <div class="table_cell">
469
+ <input type="checkbox" id="{{block}}_checkbox" class="block_checkbox" unchecked>
444
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>
445
485
  {% endfor %}
446
486
  </div>
447
487
  </div>
@@ -450,97 +490,113 @@
450
490
  </div>
451
491
 
452
492
  <div id="random_pane" class="tab_pane">
453
- <h2 class="title"><img class="modal_image" src='{% static "game/image/icons/random.svg" %}'>{% trans "Random" %}</h2>
454
- <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>
455
495
  <div class="tab_pane_content_holder">
456
496
  <div class="tab_pane_content">
457
497
  <div class="table">
458
498
  <div class="table_row">
459
- <div class="table_cell field_label"><p>{% trans "Size:" %}</p></div>
460
- <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>
461
504
  </div>
462
505
  <div class="table_row">
463
- <div class="table_cell field_label"><p>{% trans "Branchiness:" %}</p></div>
464
- <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>
465
511
  </div>
466
512
  <div class="table_row">
467
- <div class="table_cell field_label"><p>{% trans "Loopiness:" %}</p></div>
468
- <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>
469
518
  </div>
470
519
  <div class="table_row">
471
- <div class="table_cell field_label"><p>{% trans "Curviness:" %}</p></div>
472
- <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>
473
525
  </div>
474
526
  <div class="table_row">
475
- <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>
476
530
  <div class="table_cell field_value">
477
531
  <select id="trafficLightsEnabled">
478
- <option value="yes">{% trans "Yes" %}</option>
479
- <option value="no" selected>{% trans "No" %}</option>
532
+ <option value="yes">Yes</option>
533
+ <option value="no" selected>No</option>
480
534
  </select>
481
535
  </div>
482
536
  </div>
483
537
  <div class="table_row">
484
- <div class="table_cell field_label"><p>{% trans "Scenery:" %}</p></div>
538
+ <div class="table_cell field_label">
539
+ <p>Scenery:</p>
540
+ </div>
485
541
  <div class="table_cell field_value">
486
542
  <select id="sceneryEnabled">
487
- <option value="yes">{% trans "Yes" %}</option>
488
- <option value="no" selected>{% trans "No" %}</option>
543
+ <option value="yes">Yes</option>
544
+ <option value="no" selected>No</option>
489
545
  </select>
490
546
  </div>
491
547
  </div>
492
548
  </div>
493
549
  <button class="navigation_button long_button" id="generate">
494
550
  <img src="{% static 'game/image/icons/random.svg' %}">
495
- <span>{% trans "Generate" %}</span>
551
+ <span>Generate</span>
496
552
  </button>
497
553
  </div>
498
554
  </div>
499
555
  </div>
500
556
 
501
557
  <div id="description_pane" class="tab_pane">
502
- <h2 class="title"><img class="modal_image" src='{% static "game/image/icons/description.svg" %}'>{% trans "Description" %}</h2>
503
- <p> {% trans "Give this level a subtitle and a description of what to do within this level for your students." %} </p>
504
- <p> {% trans "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>
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>
505
561
  <div class="tab_pane_content_holder">
506
562
  <div class="tab_pane_content">
507
- <p>{% trans "<b>Subtitle</b><br>What is the subtitle of this level?" %}</p>
563
+ <p><b>Subtitle</b><br>What is the subtitle of this level?</p>
508
564
  <textarea id="subtitle" rows="4" cols="50"></textarea>
509
565
 
510
- <p>{% trans "<b>Description</b><br>What do players have to do to complete this level?" %}</p>
566
+ <p><b>Description</b><br>What do players have to do to complete this level?</p>
511
567
  <textarea id="description" rows="4" cols="50"></textarea>
512
568
  </div>
513
569
  </div>
514
570
  </div>
515
571
 
516
572
  <div id="hint_pane" class="tab_pane">
517
- <h2 class="title"><img class="modal_image" src='{% static "game/image/icons/hint.svg" %}'>{% trans "Hint" %}</h2>
518
- <p> {% trans "Help out your players by adding hints! Players will have the option to view a hint when they have made an unsuccessful attempt." %} </p>
519
- <p> {% trans "Players can also access hints by clicking the hint button whilst playing." %} </p>
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>
520
576
  <div class="tab_pane_content_holder">
521
577
  <div class="tab_pane_content">
522
- <p>{% trans "<b>Hint</b>" %}</p>
578
+ <p><b>Hint</b></p>
523
579
  <textarea id="hint" rows="4" cols="50"></textarea>
524
580
  </div>
525
581
  </div>
526
582
  </div>
527
583
 
528
584
  <div id="load_pane" class="tab_pane">
529
- <h2 class="title"><img class="modal_image" src='{% static "game/image/icons/load.svg" %}'>{% trans "Load" %}</h2>
530
- <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>
531
587
 
532
588
  <div class="table_control_div">
533
589
 
534
590
  <div id="does_not_exist">
535
- <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>
536
592
  </div>
537
593
 
538
594
  <div id="does_exist">
539
595
  <p>
540
- {% trans "Load:" %}
596
+ Load:
541
597
  <select id="load_type_select">
542
- <option value="ownLevels" selected>{% trans "your own levels" %}</option>
543
- <option value="sharedLevels">{% trans "shared levels" %}</option>
598
+ <option value="ownLevels" selected>your own levels</option>
599
+ <option value="sharedLevels">shared levels</option>
544
600
  </select>
545
601
  </p>
546
602
 
@@ -548,8 +604,8 @@
548
604
  <table width='100%' id="loadLevelTableHeader">
549
605
  <thead>
550
606
  <tr>
551
- <th>{% trans "Name" %}</th>
552
- <th>{% trans "Owner" %}</th>
607
+ <th>Name</th>
608
+ <th>Owner</th>
553
609
  </tr>
554
610
  </thead>
555
611
  </table>
@@ -566,29 +622,29 @@
566
622
 
567
623
  <div>
568
624
  <button class="navigation_button long_button" id="deleteLevel">
569
- <img src="{% static "game/image/icons/clear.svg" %}">
570
- <span>{% trans "Delete" %}</span>
625
+ <img src="{% static " game/image/icons/clear.svg" %}">
626
+ <span>Delete</span>
571
627
  </button>
572
628
 
573
629
  <button class="navigation_button long_button" id="loadLevel">
574
- <img src="{% static "game/image/icons/load.svg" %}">
575
- <span>{% trans "Load" %}</span>
630
+ <img src="{% static " game/image/icons/load.svg" %}">
631
+ <span>Load</span>
576
632
  </button>
577
633
  </div>
578
634
  </div>
579
635
 
580
636
  <div id="save_pane" class="tab_pane">
581
- <h2 class="title"><img class="modal_image" src='{% static "game/image/icons/save.svg" %}'>{% trans "Save" %}</h2>
582
- <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>
583
- <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>
584
640
 
585
641
  <div class="table_control_div">
586
642
  <div class="scrolling-table-wrapper">
587
643
  <table width='100%' id="saveLevelTableHeader">
588
644
  <thead>
589
645
  <tr>
590
- <th>{% trans "Name" %}</th>
591
- <th>{% trans "Owner" %}</th>
646
+ <th>Name</th>
647
+ <th>Owner</th>
592
648
  </tr>
593
649
  </thead>
594
650
  </table>
@@ -600,49 +656,49 @@
600
656
  </div>
601
657
  <br style="clear:both">
602
658
  <div>
603
- <label>{% trans "Name:" %}</label>
659
+ <label>Name:</label>
604
660
  <input type="text" id="levelNameInput">
605
661
  </div>
606
662
  </div>
607
663
  <br>
608
664
  <br>
609
665
  <button class="navigation_button long_button" id="saveLevel">
610
- <img src="{% static "game/image/icons/save.svg" %}">
611
- <span>{% trans "Save" %}</span>
666
+ <img src="{% static " game/image/icons/save.svg" %}">
667
+ <span>Save</span>
612
668
  </button>
613
669
  </div>
614
670
 
615
671
  <div id="share_pane" class="tab_pane">
616
- <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>
617
673
 
618
674
  {% if user|get_user_status == 'TEACHER' %}
619
- <p>{% trans "Here you can share your level with your classes or your fellow teachers." %}</p>
620
- <p><strong>Admin teachers can already see levels created by you.</strong></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>
621
677
  {% elif user|get_user_status == 'SCHOOL_STUDENT' %}
622
- <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>
623
679
  {% endif %}
624
680
 
625
681
  <div class="table_control_div">
626
682
  {% if user|get_user_status == 'TEACHER' %}
627
- <p>
628
- {% trans "Share with:" %}
629
- <select id="share_type_select">
630
- <option value="classes" selected>{% trans "Classes" %}</option>
631
- <option value="teachers">{% trans "Teachers" %}</option>
632
- </select>
633
- </p>
634
-
635
- <p id="class_selection">
636
- {% trans "Class:" %} <select id="class_select"></select>
637
- </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>
638
694
  {% endif %}
639
695
 
640
696
  <div id="shared_levels" class="scrolling-table-wrapper">
641
697
  <table width='100%' id="shareLevelTableHeader">
642
698
  <thead>
643
699
  <tr>
644
- <th>{% trans "Name" %}</th>
645
- <th>{% trans "Shared" %}</th>
700
+ <th>Name</th>
701
+ <th>Shared</th>
646
702
  </tr>
647
703
  </thead>
648
704
  </table>
@@ -656,7 +712,7 @@
656
712
 
657
713
  <button class="navigation_button long_button" id="shareWithAll">
658
714
  <img src="{% static 'game/image/icons/share.svg' %}">
659
- <span>{% trans "Share with all" %}</span>
715
+ <span>Share with all</span>
660
716
  </button>
661
717
  </div>
662
718
 
@@ -677,4 +733,4 @@
677
733
  <div id="blockly"></div>
678
734
  <xml id="blockly_toolbox"></xml>
679
735
 
680
- {% endblock %}
736
+ {% endblock %}
@@ -1,20 +1,20 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rapid-router
3
- Version: 7.6.4
3
+ Version: 7.6.6
4
4
  Classifier: Programming Language :: Python
5
5
  Classifier: Programming Language :: Python :: 3.12
6
6
  Classifier: Framework :: Django
7
7
  License-File: LICENSE.md
8
- Requires-Dist: asgiref==3.9.1; python_version >= "3.9"
8
+ Requires-Dist: asgiref==3.9.2; python_version >= "3.9"
9
9
  Requires-Dist: asttokens==3.0.0; python_version >= "3.8"
10
10
  Requires-Dist: certifi==2025.8.3; python_version >= "3.7"
11
11
  Requires-Dist: cffi==1.17.1; platform_python_implementation != "PyPy"
12
- Requires-Dist: cfl-common==8.9.5
12
+ Requires-Dist: cfl-common==8.9.6
13
13
  Requires-Dist: charset-normalizer==3.4.3; python_version >= "3.7"
14
14
  Requires-Dist: cryptography==44.0.1; python_version >= "3.7" and python_full_version not in "3.9.0, 3.9.1"
15
15
  Requires-Dist: decorator==5.2.1; python_version >= "3.8"
16
16
  Requires-Dist: diff-match-patch==20241021; python_version >= "3.7"
17
- Requires-Dist: django==5.1.12; python_version >= "3.10"
17
+ Requires-Dist: django==5.1.13; python_version >= "3.10"
18
18
  Requires-Dist: django-countries==7.6.1
19
19
  Requires-Dist: django-csp==3.8
20
20
  Requires-Dist: django-formtools==2.5.1; python_version >= "3.8"
@@ -27,7 +27,7 @@ Requires-Dist: django-two-factor-auth==1.17.0; python_version >= "3.8"
27
27
  Requires-Dist: djangorestframework==3.16.0; python_version >= "3.9"
28
28
  Requires-Dist: executing==2.2.1; python_version >= "3.8"
29
29
  Requires-Dist: idna==3.10; python_version >= "3.6"
30
- Requires-Dist: ipython==9.5.0; python_version >= "3.11"
30
+ Requires-Dist: ipython==9.6.0; python_version >= "3.11"
31
31
  Requires-Dist: ipython-pygments-lexers==1.1.1; python_version >= "3.8"
32
32
  Requires-Dist: jedi==0.19.2; python_version >= "3.6"
33
33
  Requires-Dist: libsass==0.23.0; python_version >= "3.8"
@@ -59,29 +59,29 @@ Requires-Dist: traitlets==5.14.3; python_version >= "3.8"
59
59
  Requires-Dist: typing-extensions==4.15.0; python_version >= "3.9"
60
60
  Requires-Dist: tzdata==2025.2; python_version >= "2"
61
61
  Requires-Dist: urllib3==2.5.0; python_version >= "3.9"
62
- Requires-Dist: wcwidth==0.2.13
62
+ Requires-Dist: wcwidth==0.2.14; python_version >= "3.6"
63
63
  Requires-Dist: wheel==0.45.1; python_version >= "3.8"
64
64
  Provides-Extra: dev
65
65
  Requires-Dist: amqp==5.3.1; python_version >= "3.6" and extra == "dev"
66
- Requires-Dist: asgiref==3.9.1; python_version >= "3.9" and extra == "dev"
67
- Requires-Dist: attrs==25.3.0; python_version >= "3.8" and extra == "dev"
68
- Requires-Dist: billiard==4.2.1; python_version >= "3.7" and extra == "dev"
69
- Requires-Dist: black==25.1.0; python_version >= "3.9" and extra == "dev"
66
+ Requires-Dist: asgiref==3.9.2; python_version >= "3.9" and extra == "dev"
67
+ Requires-Dist: attrs==25.4.0; python_version >= "3.9" and extra == "dev"
68
+ Requires-Dist: billiard==4.2.2; python_version >= "3.7" and extra == "dev"
69
+ Requires-Dist: black==25.9.0; python_version >= "3.9" and extra == "dev"
70
70
  Requires-Dist: boto3==1.36.14; python_version >= "3.8" and extra == "dev"
71
71
  Requires-Dist: botocore==1.36.26; python_version >= "3.8" and extra == "dev"
72
72
  Requires-Dist: celery[sqs]==5.4.0; python_version >= "3.8" and extra == "dev"
73
73
  Requires-Dist: certifi==2025.8.3; python_version >= "3.7" and extra == "dev"
74
74
  Requires-Dist: cffi==1.17.1; platform_python_implementation != "PyPy" and extra == "dev"
75
- Requires-Dist: cfl-common==8.9.5; extra == "dev"
75
+ Requires-Dist: cfl-common==8.9.6; extra == "dev"
76
76
  Requires-Dist: charset-normalizer==3.4.3; python_version >= "3.7" and extra == "dev"
77
- Requires-Dist: click==8.2.1; python_version >= "3.10" and extra == "dev"
77
+ Requires-Dist: click==8.3.0; python_version >= "3.10" and extra == "dev"
78
78
  Requires-Dist: click-didyoumean==0.3.1; python_full_version >= "3.6.2" and extra == "dev"
79
79
  Requires-Dist: click-plugins==1.1.1.2; extra == "dev"
80
80
  Requires-Dist: click-repl==0.3.0; python_version >= "3.6" and extra == "dev"
81
- Requires-Dist: codeforlife-portal==8.9.5; extra == "dev"
81
+ Requires-Dist: codeforlife-portal==8.9.6; extra == "dev"
82
82
  Requires-Dist: cryptography==44.0.1; (python_version >= "3.7" and python_full_version not in "3.9.0, 3.9.1") and extra == "dev"
83
83
  Requires-Dist: diff-match-patch==20241021; python_version >= "3.7" and extra == "dev"
84
- Requires-Dist: django==5.1.12; python_version >= "3.10" and extra == "dev"
84
+ Requires-Dist: django==5.1.13; python_version >= "3.10" and extra == "dev"
85
85
  Requires-Dist: django-classy-tags==4.1.0; python_version >= "3.8" and extra == "dev"
86
86
  Requires-Dist: django-countries==7.6.1; extra == "dev"
87
87
  Requires-Dist: django-csp==3.8; extra == "dev"
@@ -106,11 +106,11 @@ Requires-Dist: h11==0.16.0; python_version >= "3.8" and extra == "dev"
106
106
  Requires-Dist: idna==3.10; python_version >= "3.6" and extra == "dev"
107
107
  Requires-Dist: importlib-metadata==4.13.0; python_version >= "3.7" and extra == "dev"
108
108
  Requires-Dist: iniconfig==2.1.0; python_version >= "3.8" and extra == "dev"
109
- Requires-Dist: isort==6.0.1; python_full_version >= "3.9.0" and extra == "dev"
109
+ Requires-Dist: isort==6.1.0; python_full_version >= "3.9.0" and extra == "dev"
110
110
  Requires-Dist: jmespath==1.0.1; python_version >= "3.7" and extra == "dev"
111
111
  Requires-Dist: kombu[sqs]==5.5.4; python_version >= "3.8" and extra == "dev"
112
112
  Requires-Dist: libsass==0.23.0; python_version >= "3.8" and extra == "dev"
113
- Requires-Dist: markupsafe==3.0.2; python_version >= "3.9" and extra == "dev"
113
+ Requires-Dist: markupsafe==3.0.3; python_version >= "3.9" and extra == "dev"
114
114
  Requires-Dist: more-itertools==8.7.0; python_version >= "3.5" and extra == "dev"
115
115
  Requires-Dist: mypy-extensions==1.1.0; python_version >= "3.8" and extra == "dev"
116
116
  Requires-Dist: numpy==2.3.2; python_version >= "3.11" and extra == "dev"
@@ -121,12 +121,12 @@ Requires-Dist: pathspec==0.12.1; python_version >= "3.8" and extra == "dev"
121
121
  Requires-Dist: pgeocode==0.4.0; python_version >= "3.8" and extra == "dev"
122
122
  Requires-Dist: phonenumbers==8.12.12; extra == "dev"
123
123
  Requires-Dist: pillow==11.3.0; python_version >= "3.9" and extra == "dev"
124
- Requires-Dist: platformdirs==4.4.0; python_version >= "3.9" and extra == "dev"
124
+ Requires-Dist: platformdirs==4.5.0; python_version >= "3.10" and extra == "dev"
125
125
  Requires-Dist: pluggy==1.6.0; python_version >= "3.9" and extra == "dev"
126
126
  Requires-Dist: prompt-toolkit==3.0.52; python_version >= "3.8" and extra == "dev"
127
127
  Requires-Dist: psycopg2-binary==2.9.9; python_version >= "3.7" and extra == "dev"
128
128
  Requires-Dist: pycparser==2.22; python_version >= "3.8" and extra == "dev"
129
- Requires-Dist: pycurl==7.45.6; python_version >= "3.5" and extra == "dev"
129
+ Requires-Dist: pycurl==7.45.7; python_version >= "3.5" and extra == "dev"
130
130
  Requires-Dist: pygments==2.19.2; python_version >= "3.8" and extra == "dev"
131
131
  Requires-Dist: pyjwt==2.6.0; python_version >= "3.7" and extra == "dev"
132
132
  Requires-Dist: pyopenssl==25.1.0; python_version >= "3.7" and extra == "dev"
@@ -138,6 +138,7 @@ Requires-Dist: pytest-order==1.3.0; python_version >= "3.7" and extra == "dev"
138
138
  Requires-Dist: pytest-xdist==3.8.0; python_version >= "3.9" and extra == "dev"
139
139
  Requires-Dist: python-dateutil==2.9.0.post0; (python_version >= "2.7" and python_version not in "3.0, 3.1, 3.2, 3.3") and extra == "dev"
140
140
  Requires-Dist: python-dotenv==1.0.1; python_version >= "3.8" and extra == "dev"
141
+ Requires-Dist: pytokens==0.1.10; python_version >= "3.8" and extra == "dev"
141
142
  Requires-Dist: pytz==2025.2; extra == "dev"
142
143
  Requires-Dist: pyyaml==6.0.2; python_version >= "3.8" and extra == "dev"
143
144
  Requires-Dist: qrcode==7.4.2; python_version >= "3.7" and extra == "dev"
@@ -152,16 +153,16 @@ Requires-Dist: sniffio==1.3.1; python_version >= "3.7" and extra == "dev"
152
153
  Requires-Dist: sortedcontainers==2.4.0; extra == "dev"
153
154
  Requires-Dist: sqlparse==0.5.3; python_version >= "3.8" and extra == "dev"
154
155
  Requires-Dist: tablib==3.7.0; python_version >= "3.9" and extra == "dev"
155
- Requires-Dist: trio==0.30.0; python_version >= "3.9" and extra == "dev"
156
+ Requires-Dist: trio==0.31.0; python_version >= "3.9" and extra == "dev"
156
157
  Requires-Dist: trio-websocket==0.12.2; python_version >= "3.8" and extra == "dev"
157
158
  Requires-Dist: typing-extensions==4.15.0; python_version >= "3.9" and extra == "dev"
158
159
  Requires-Dist: tzdata==2025.2; python_version >= "2" and extra == "dev"
159
160
  Requires-Dist: urllib3==2.5.0; python_version >= "3.9" and extra == "dev"
160
- Requires-Dist: uvicorn==0.35.0; python_version >= "3.9" and extra == "dev"
161
+ Requires-Dist: uvicorn==0.37.0; python_version >= "3.9" and extra == "dev"
161
162
  Requires-Dist: uvicorn-worker==0.2.0; python_version >= "3.8" and extra == "dev"
162
163
  Requires-Dist: vine==5.1.0; python_version >= "3.6" and extra == "dev"
163
- Requires-Dist: wcwidth==0.2.13; extra == "dev"
164
- Requires-Dist: websocket-client==1.8.0; python_version >= "3.8" and extra == "dev"
164
+ Requires-Dist: wcwidth==0.2.14; python_version >= "3.6" and extra == "dev"
165
+ Requires-Dist: websocket-client==1.9.0; python_version >= "3.9" and extra == "dev"
165
166
  Requires-Dist: werkzeug==3.1.3; python_version >= "3.9" and extra == "dev"
166
167
  Requires-Dist: wheel==0.45.1; python_version >= "3.8" and extra == "dev"
167
168
  Requires-Dist: whitenoise==6.9.0; python_version >= "3.9" and extra == "dev"
@@ -3,7 +3,7 @@ example_project/rapid_router_test_settings.py,sha256=-8pBDGeDSM0ziu5BLUXVqB9J97A
3
3
  example_project/settings.py,sha256=I_upxXh1PBbeX0aKttLeqjGbjPCDTfgMVJgBv7vcc0g,4599
4
4
  example_project/urls.py,sha256=XHug_cpNy21yOef3E1-wWT5VkTuxpl6ZXIlCj6jDjWA,422
5
5
  example_project/wsgi.py,sha256=U1W6WzZxZaIdYZ5tks7w9fqp5WS5qvn2iThsVcskrWw,829
6
- game/__init__.py,sha256=-zAQzOdsX1kfxOhQ5Xq9-hZcm-GMW9c3Y08wuSLD5MI,22
6
+ game/__init__.py,sha256=c6W5rzG5SkqznJ3bXPTuNkrlczcDrg7D87EhAuSMq6s,22
7
7
  game/admin.py,sha256=BLwwaqQYuqmMdwqnvhdan19iGxdcoBX4CXFk_ROG5-M,1431
8
8
  game/app_settings.py,sha256=mlg-1AiP7AR5JNOHAXXLuCrYWaZMmSihvSYk9c2c8YY,857
9
9
  game/cache.py,sha256=dtOiFl6Z4I2Q9-8Hz24ZI-5C0asXYSQhF2Be5q74N8g,2227
@@ -764,7 +764,7 @@ game/templates/game/basenonav.html,sha256=XG134a66OpQNrPvU76YwpXo9wj1YEl4s5NmBBc
764
764
  game/templates/game/crowdin.html,sha256=3wgp2vHxD117oy8hNALjyPutHm6iMdY0eNJYCQtqnAI,299
765
765
  game/templates/game/error.html,sha256=pu_WX5DtctmhD2enf5rC--Uys_7NOPtndsYKSOF08Mk,167
766
766
  game/templates/game/game.html,sha256=3Bdh7SKDTcSP6CXW1Et2q9Igb3Ml6Ld8TDRcOAKc0-U,30479
767
- game/templates/game/level_editor.html,sha256=k8ogNMI8CUuwcTWfZvoURsTkjDwicC-oZyYb7u9Nvs0,29216
767
+ game/templates/game/level_editor.html,sha256=bUe_2tUEB1Fwjd6rDszyqvLzK2Upy8Nz3MbKiqIfvxM,28974
768
768
  game/templates/game/level_moderation.html,sha256=6JOutcJd9ZkkBppF4pKXdH5Q8dZpC2n1SUMHp7vVrEE,7299
769
769
  game/templates/game/level_selection.html,sha256=zDh59c8nE_T_tE3bvTwlxn96psYu0rROWdihMtcdNJI,11156
770
770
  game/templates/game/logged_students.html,sha256=WBTwdNb5YGopLdog7-vNDc9WO5_u8pqi3ehG12g8VOM,1471
@@ -804,8 +804,8 @@ game/views/level_solutions.py,sha256=oYwx0p1LuY7609H2lid7lAq3QvcD6_K9cy5U_i6CwWg
804
804
  game/views/scoreboard.py,sha256=Lxy7XtoG7VwWpTb-c22BGC6eN8uCmmOnQ2qjY-oXA3k,16914
805
805
  game/views/scoreboard_csv.py,sha256=yx4tOwx5QsHyU1S1BUPUqRBWIh5idq8QVtBID-NqZto,1768
806
806
  game/views/worksheet.py,sha256=R7DgR3OhgITkmPHzkv0WLu_bkHvt3RGkcD7ySx3ippg,705
807
- rapid_router-7.6.4.dist-info/licenses/LICENSE.md,sha256=9AbRlCDqD2D1tPibimysFv3zg3AIc49-eyv9aEsyq9w,115
808
- rapid_router-7.6.4.dist-info/METADATA,sha256=h3DhO9ESgp6KNkj1ruvuEvC9B6-AvPIzVEB1ZdXuu_g,11672
809
- rapid_router-7.6.4.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
810
- rapid_router-7.6.4.dist-info/top_level.txt,sha256=rKP4ryr1t8Wcnx8grJHDViM3T5cMYH_0vygDjC04ArA,21
811
- rapid_router-7.6.4.dist-info/RECORD,,
807
+ rapid_router-7.6.6.dist-info/licenses/LICENSE.md,sha256=9AbRlCDqD2D1tPibimysFv3zg3AIc49-eyv9aEsyq9w,115
808
+ rapid_router-7.6.6.dist-info/METADATA,sha256=KthadGhK30HvZFVtgNYGV0FnW6Ryz_YY28Zl2y7tKi0,11802
809
+ rapid_router-7.6.6.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
810
+ rapid_router-7.6.6.dist-info/top_level.txt,sha256=rKP4ryr1t8Wcnx8grJHDViM3T5cMYH_0vygDjC04ArA,21
811
+ rapid_router-7.6.6.dist-info/RECORD,,