Description:
wip
Commit status:
[Not Reviewed]
References:
Diff options:
Comments:
0 Commit comments
0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
r870:9386e234b7f9 - - 29 files changed: 587 inserted, 683 deleted
@@ -0,0 +1,1 | |||
|
1 | + $font-size-base: 0.875rem; |
@@ -0,0 +1,416 | |||
|
1 | + | |
|
2 | + .secondnavbar { | |
|
3 | + top: 50px; | |
|
4 | + } | |
|
5 | + | |
|
6 | + // --------------- bootstrap file upload ---------------------- | |
|
7 | + .btn-file { | |
|
8 | + position: relative; | |
|
9 | + overflow: hidden; | |
|
10 | + } | |
|
11 | + | |
|
12 | + .btn-file input[type=file] { | |
|
13 | + position: absolute; | |
|
14 | + top: 0; | |
|
15 | + right: 0; | |
|
16 | + min-width: 100%; | |
|
17 | + min-height: 100%; | |
|
18 | + font-size: 100px; | |
|
19 | + text-align: right; | |
|
20 | + filter: alpha(opacity = 0); | |
|
21 | + opacity: 0; | |
|
22 | + outline: none; | |
|
23 | + background: white; | |
|
24 | + cursor: inherit; | |
|
25 | + display: block; | |
|
26 | + } | |
|
27 | + | |
|
28 | + body { | |
|
29 | + //font-size: 13px | |
|
30 | + font-family: 'Krub', Tahoma, "sans-serif"; | |
|
31 | + margin: 10px; | |
|
32 | + padding: 10px; | |
|
33 | + padding-top: 60px; | |
|
34 | + } | |
|
35 | + | |
|
36 | + // ------------------ bootstrap sortable -------------------- | |
|
37 | + table.sortable th { | |
|
38 | + padding-right: 20px !important; | |
|
39 | + | |
|
40 | + span.sign { | |
|
41 | + right: (-15px) !important; | |
|
42 | + } | |
|
43 | + | |
|
44 | + &.text-right { | |
|
45 | + padding-left: 20px !important; | |
|
46 | + padding-right: 8px !important; | |
|
47 | + | |
|
48 | + &:after, span.sign { | |
|
49 | + left: (-15px) !important; | |
|
50 | + } | |
|
51 | + } | |
|
52 | + } | |
|
53 | + | |
|
54 | + input { | |
|
55 | + font-family: Tahoma, "sans-serif"; | |
|
56 | + } | |
|
57 | + | |
|
58 | + h1 { | |
|
59 | + color: #334488; | |
|
60 | + } | |
|
61 | + | |
|
62 | + h2 { | |
|
63 | + color: #5566bb; | |
|
64 | + } | |
|
65 | + | |
|
66 | + hr { | |
|
67 | + border-top: 1px solid #dddddd; | |
|
68 | + border-bottom: 1px solid #eeeeee; | |
|
69 | + } | |
|
70 | + | |
|
71 | + //#a | |
|
72 | + // color: #6666cc | |
|
73 | + // text-decoration: none | |
|
74 | + // | |
|
75 | + // &:link, &:visited | |
|
76 | + // color: #6666cc | |
|
77 | + // text-decoration: none | |
|
78 | + // | |
|
79 | + // &:hover, &:focus | |
|
80 | + // color: #111166 | |
|
81 | + // text-decoration: none | |
|
82 | + | |
|
83 | + div { | |
|
84 | + &.userbar { | |
|
85 | + line-height: 1.5em; | |
|
86 | + text-align: right; | |
|
87 | + font-size: 12px; | |
|
88 | + } | |
|
89 | + | |
|
90 | + &.title { | |
|
91 | + padding: 10px 0px; | |
|
92 | + line-height: 1.5em; | |
|
93 | + font-size: 13px; | |
|
94 | + | |
|
95 | + span.contest-over-msg { | |
|
96 | + font-size: 15px; | |
|
97 | + color: red; | |
|
98 | + } | |
|
99 | + | |
|
100 | + table { | |
|
101 | + width: 100%; | |
|
102 | + font-weight: bold; | |
|
103 | + } | |
|
104 | + | |
|
105 | + td { | |
|
106 | + &.left-col { | |
|
107 | + text-align: left; | |
|
108 | + vertical-align: top; | |
|
109 | + color: #444444; | |
|
110 | + } | |
|
111 | + | |
|
112 | + &.right-col { | |
|
113 | + text-align: right; | |
|
114 | + vertical-align: top; | |
|
115 | + font-size: 18px; | |
|
116 | + color: #116699; | |
|
117 | + } | |
|
118 | + } | |
|
119 | + } | |
|
120 | + } | |
|
121 | + | |
|
122 | + table.info { | |
|
123 | + margin: 10px 0; | |
|
124 | + border: 1px solid #666666; | |
|
125 | + border-collapse: collapse; | |
|
126 | + font-size: 12px; | |
|
127 | + | |
|
128 | + th { | |
|
129 | + border: 1px solid #666666; | |
|
130 | + line-height: 1.5em; | |
|
131 | + padding: 0 0.5em; | |
|
132 | + } | |
|
133 | + | |
|
134 | + td { | |
|
135 | + border-left: 1px solid #666666; | |
|
136 | + border-right: 1px solid #666666; | |
|
137 | + line-height: 1.5em; | |
|
138 | + padding: 0 0.5em; | |
|
139 | + } | |
|
140 | + } | |
|
141 | + | |
|
142 | + tr { | |
|
143 | + &.info-head { | |
|
144 | + background: #777777; | |
|
145 | + color: white; | |
|
146 | + } | |
|
147 | + | |
|
148 | + &.info-odd { | |
|
149 | + background: #eeeeee; | |
|
150 | + } | |
|
151 | + | |
|
152 | + &.info-even { | |
|
153 | + background: #fcfcfc; | |
|
154 | + } | |
|
155 | + } | |
|
156 | + | |
|
157 | + @mixin basicbox { | |
|
158 | + background: #eeeeff; | |
|
159 | + border: 1px dotted #99aaee; | |
|
160 | + padding: 5px; | |
|
161 | + margin: 10px 0px; | |
|
162 | + color: black; | |
|
163 | + font-size: 13px; | |
|
164 | + } | |
|
165 | + | |
|
166 | + .infobox { | |
|
167 | + @include basicbox; | |
|
168 | + } | |
|
169 | + | |
|
170 | + .submitbox { | |
|
171 | + @include basicbox; | |
|
172 | + } | |
|
173 | + | |
|
174 | + .errorExplanation { | |
|
175 | + border: 1px dotted gray; | |
|
176 | + color: #bb2222; | |
|
177 | + padding: 5px 15px 5px 15px; | |
|
178 | + margin-bottom: 5px; | |
|
179 | + background-color: white; | |
|
180 | + font-weight: normal; | |
|
181 | + | |
|
182 | + h2 { | |
|
183 | + color: #cc1111; | |
|
184 | + font-weight: bold; | |
|
185 | + } | |
|
186 | + } | |
|
187 | + | |
|
188 | + table.uinfo { | |
|
189 | + border-collapse: collapse; | |
|
190 | + border: 1px solid black; | |
|
191 | + font-size: 13px; | |
|
192 | + } | |
|
193 | + | |
|
194 | + td.uinfo { | |
|
195 | + vertical-align: top; | |
|
196 | + border: 1px solid black; | |
|
197 | + padding: 5px; | |
|
198 | + } | |
|
199 | + | |
|
200 | + th.uinfo { | |
|
201 | + background: lightgreen; | |
|
202 | + vertical-align: top; | |
|
203 | + text-align: right; | |
|
204 | + border: 1px solid black; | |
|
205 | + padding: 5px; | |
|
206 | + } | |
|
207 | + | |
|
208 | + div { | |
|
209 | + &.compilermsgbody { | |
|
210 | + font-family: monospace; | |
|
211 | + } | |
|
212 | + | |
|
213 | + &.task-menu { | |
|
214 | + text-align: center; | |
|
215 | + font-size: 13px; | |
|
216 | + line-height: 1.75em; | |
|
217 | + font-weight: bold; | |
|
218 | + border-top: 1px dashed gray; | |
|
219 | + border-bottom: 1px dashed gray; | |
|
220 | + margin-top: 2px; | |
|
221 | + margin-bottom: 4px; | |
|
222 | + } | |
|
223 | + } | |
|
224 | + | |
|
225 | + table.taskdesc { | |
|
226 | + border: 2px solid #dddddd; | |
|
227 | + border-collapse: collapse; | |
|
228 | + margin: 10px auto; | |
|
229 | + width: 90%; | |
|
230 | + font-size: 13px; | |
|
231 | + | |
|
232 | + p { | |
|
233 | + font-size: 13px; | |
|
234 | + } | |
|
235 | + | |
|
236 | + tr.name { | |
|
237 | + border: 2px solid #dddddd; | |
|
238 | + background: #dddddd; | |
|
239 | + color: #333333; | |
|
240 | + font-weight: bold; | |
|
241 | + font-size: 14px; | |
|
242 | + line-height: 1.5em; | |
|
243 | + text-align: center; | |
|
244 | + } | |
|
245 | + | |
|
246 | + td { | |
|
247 | + &.desc-odd { | |
|
248 | + padding: 5px; | |
|
249 | + padding-left: 20px; | |
|
250 | + background: #fefeee; | |
|
251 | + } | |
|
252 | + | |
|
253 | + &.desc-even { | |
|
254 | + padding: 5px; | |
|
255 | + padding-left: 20px; | |
|
256 | + background: #feeefe; | |
|
257 | + } | |
|
258 | + } | |
|
259 | + } | |
|
260 | + | |
|
261 | + .announcementbox { | |
|
262 | + margin: 10px 0px; | |
|
263 | + background: #bbddee; | |
|
264 | + padding: 1px; | |
|
265 | + | |
|
266 | + span.title { | |
|
267 | + font-weight: bold; | |
|
268 | + color: #224455; | |
|
269 | + padding-left: 10px; | |
|
270 | + line-height: 1.6em; | |
|
271 | + } | |
|
272 | + } | |
|
273 | + | |
|
274 | + .announcement { | |
|
275 | + margin: 2px; | |
|
276 | + background: white; | |
|
277 | + padding: 1px; | |
|
278 | + padding-left: 10px; | |
|
279 | + padding-right: 10px; | |
|
280 | + padding-top: 5px; | |
|
281 | + padding-bottom: 5px; | |
|
282 | + } | |
|
283 | + | |
|
284 | + .announcement p { | |
|
285 | + font-size: 12px; | |
|
286 | + margin: 2px; | |
|
287 | + } | |
|
288 | + | |
|
289 | + .pub-info { | |
|
290 | + text-align: right; | |
|
291 | + font-style: italic; | |
|
292 | + font-size: 9px; | |
|
293 | + | |
|
294 | + p { | |
|
295 | + text-align: right; | |
|
296 | + font-style: italic; | |
|
297 | + font-size: 9px; | |
|
298 | + } | |
|
299 | + } | |
|
300 | + | |
|
301 | + .announcement { | |
|
302 | + .toggles { | |
|
303 | + font-weight: normal; | |
|
304 | + float: right; | |
|
305 | + font-size: 80%; | |
|
306 | + } | |
|
307 | + | |
|
308 | + .announcement-title { | |
|
309 | + font-weight: bold; | |
|
310 | + } | |
|
311 | + } | |
|
312 | + | |
|
313 | + div { | |
|
314 | + &.message { | |
|
315 | + margin: 10px 0 0; | |
|
316 | + | |
|
317 | + div { | |
|
318 | + &.message { | |
|
319 | + margin: 0 0 0 30px; | |
|
320 | + } | |
|
321 | + | |
|
322 | + &.body { | |
|
323 | + border: 2px solid #dddddd; | |
|
324 | + background: #fff8f8; | |
|
325 | + padding-left: 5px; | |
|
326 | + } | |
|
327 | + | |
|
328 | + &.reply-body { | |
|
329 | + border: 2px solid #bbbbbb; | |
|
330 | + background: #fffff8; | |
|
331 | + padding-left: 5px; | |
|
332 | + } | |
|
333 | + | |
|
334 | + &.stat { | |
|
335 | + font-size: 10px; | |
|
336 | + line-height: 1.75em; | |
|
337 | + padding: 0 5px; | |
|
338 | + color: #333333; | |
|
339 | + background: #dddddd; | |
|
340 | + font-weight: bold; | |
|
341 | + } | |
|
342 | + | |
|
343 | + &.message div.stat { | |
|
344 | + font-size: 10px; | |
|
345 | + line-height: 1.75em; | |
|
346 | + padding: 0 5px; | |
|
347 | + color: #444444; | |
|
348 | + background: #bbbbbb; | |
|
349 | + font-weight: bold; | |
|
350 | + } | |
|
351 | + } | |
|
352 | + } | |
|
353 | + | |
|
354 | + &.contest-title { | |
|
355 | + color: white; | |
|
356 | + text-align: center; | |
|
357 | + line-height: 2em; | |
|
358 | + } | |
|
359 | + | |
|
360 | + &.registration-desc, &.test-desc { | |
|
361 | + border: 1px dotted gray; | |
|
362 | + background: #f5f5f5; | |
|
363 | + padding: 5px; | |
|
364 | + margin: 10px 0; | |
|
365 | + font-size: 12px; | |
|
366 | + line-height: 1.5em; | |
|
367 | + } | |
|
368 | + } | |
|
369 | + | |
|
370 | + h2.contest-title { | |
|
371 | + margin-top: 5px; | |
|
372 | + margin-bottom: 5px; | |
|
373 | + } | |
|
374 | + | |
|
375 | + | |
|
376 | + | |
|
377 | + .grader-comment { | |
|
378 | + word-wrap: break-word; | |
|
379 | + font-family: consolas; | |
|
380 | + } | |
|
381 | + | |
|
382 | + | |
|
383 | + golden-btn + .golden-btn { margin-top: 1em; } | |
|
384 | + | |
|
385 | + .golden-btn { | |
|
386 | + display: inline-block; | |
|
387 | + outline: none; | |
|
388 | + font-family: inherit; | |
|
389 | + box-sizing: border-box; | |
|
390 | + border: none; | |
|
391 | + box-shadow: 0 3px 6px rgba(0,0,0,.16), 0 3px 6px rgba(110,80,20,.4), | |
|
392 | + inset 0 -2px 5px 1px rgba(139,66,8,1), | |
|
393 | + inset 0 -1px 1px 3px rgba(250,227,133,1); | |
|
394 | + background-image: linear-gradient(160deg, #a54e07, #b47e11, #fef1a2, #bc881b, #a54e07) !important; | |
|
395 | + border: 1px solid #a55d07; | |
|
396 | + color: rgb(120,50,5); | |
|
397 | + text-shadow: 0 2px 2px rgba(250, 227, 133, 1); | |
|
398 | + cursor: pointer; | |
|
399 | + transition: all .2s ease-in-out; | |
|
400 | + background-size: 100% 100%; | |
|
401 | + background-position:center; | |
|
402 | + } | |
|
403 | + .golden-btn:focus, | |
|
404 | + .golden-btn:hover { | |
|
405 | + background-size: 150% 150%; | |
|
406 | + box-shadow: 0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23), | |
|
407 | + inset 0 -2px 5px 1px #b17d10, | |
|
408 | + inset 0 -1px 1px 3px rgba(250,227,133,1); | |
|
409 | + border: 1px solid rgba(165,93,7,.6); | |
|
410 | + color: rgba(120,50,5,.8); | |
|
411 | + } | |
|
412 | + .golden-btn:active { | |
|
413 | + box-shadow: 0 3px 6px rgba(0,0,0,.16), 0 3px 6px rgba(110,80,20,.4), | |
|
414 | + inset 0 -2px 5px 1px #b17d10, | |
|
415 | + inset 0 -1px 1px 3px rgba(250,227,133,1); | |
|
416 | + } |
@@ -102,7 +102,7 | |||
|
102 | 102 | |
|
103 | 103 | group :development, :test do |
|
104 | 104 | # Call 'byebug' anywhere in the code to stop execution and get a debugger console |
|
105 | - gem 'debug', platforms: [:mri, :mingw, :x64_mingw] | |
|
105 | + gem 'byebug' | |
|
106 | 106 | end |
|
107 | 107 | |
|
108 | 108 | group :development do |
@@ -92,11 +92,12 | |||
|
92 | 92 | bindex (0.8.1) |
|
93 | 93 | bootsnap (1.13.0) |
|
94 | 94 | msgpack (~> 1.2) |
|
95 |
- bootstrap (5.2. |
|
|
95 | + bootstrap (5.2.1) | |
|
96 | 96 | autoprefixer-rails (>= 9.1.0) |
|
97 |
- popper_js (>= 2.11. |
|
|
97 | + popper_js (>= 2.11.6, < 3) | |
|
98 | 98 | sassc-rails (>= 2.0.0) |
|
99 | 99 | builder (3.2.4) |
|
100 | + byebug (11.1.3) | |
|
100 | 101 | capybara (3.37.1) |
|
101 | 102 | addressable |
|
102 | 103 | matrix |
@@ -116,9 +117,6 | |||
|
116 | 117 | coffee-script-source (1.12.2) |
|
117 | 118 | concurrent-ruby (1.1.10) |
|
118 | 119 | crass (1.0.6) |
|
119 | - debug (1.6.2) | |
|
120 | - irb (>= 1.3.6) | |
|
121 | - reline (>= 0.3.1) | |
|
122 | 120 | digest (3.1.0) |
|
123 | 121 | dynamic_form (1.1.4) |
|
124 | 122 | erubi (1.11.0) |
@@ -149,9 +147,6 | |||
|
149 | 147 | actionpack (>= 6.0.0) |
|
150 | 148 | railties (>= 6.0.0) |
|
151 | 149 | in_place_editing (1.2.0) |
|
152 | - io-console (0.5.11) | |
|
153 | - irb (1.4.1) | |
|
154 | - reline (>= 0.3.0) | |
|
155 | 150 | jbuilder (2.11.5) |
|
156 | 151 | actionview (>= 5.0.0) |
|
157 | 152 | activesupport (>= 5.0.0) |
@@ -162,7 +157,7 | |||
|
162 | 157 | listen (3.0.8) |
|
163 | 158 | rb-fsevent (~> 0.9, >= 0.9.4) |
|
164 | 159 | rb-inotify (~> 0.9, >= 0.9.7) |
|
165 |
- loofah (2.1 |
|
|
160 | + loofah (2.19.0) | |
|
166 | 161 | crass (~> 1.0.2) |
|
167 | 162 | nokogiri (>= 1.5.9) |
|
168 | 163 | mail (2.7.1) |
@@ -199,11 +194,9 | |||
|
199 | 194 | net-protocol |
|
200 | 195 | timeout |
|
201 | 196 | nio4r (2.5.8) |
|
202 | - nokogiri (1.13.8-x86_64-darwin) | |
|
203 | - racc (~> 1.4) | |
|
204 | 197 | nokogiri (1.13.8-x86_64-linux) |
|
205 | 198 | racc (~> 1.4) |
|
206 |
- popper_js (2.11. |
|
|
199 | + popper_js (2.11.6) | |
|
207 | 200 | public_suffix (5.0.0) |
|
208 | 201 | puma (5.6.5) |
|
209 | 202 | nio4r (~> 2.0) |
@@ -243,8 +236,6 | |||
|
243 | 236 | ffi (~> 1.0) |
|
244 | 237 | rdiscount (2.2.0.2) |
|
245 | 238 | regexp_parser (2.5.0) |
|
246 | - reline (0.3.1) | |
|
247 | - io-console (~> 0.5) | |
|
248 | 239 | rexml (3.2.5) |
|
249 | 240 | rouge (4.0.0) |
|
250 | 241 | ruby-progressbar (1.11.0) |
@@ -279,7 +270,6 | |||
|
279 | 270 | actionpack (>= 5.2) |
|
280 | 271 | activesupport (>= 5.2) |
|
281 | 272 | sprockets (>= 3.0.0) |
|
282 | - sqlite3 (1.5.0-x86_64-darwin) | |
|
283 | 273 | sqlite3 (1.5.0-x86_64-linux) |
|
284 | 274 | strscan (3.0.4) |
|
285 | 275 | temple (0.8.2) |
@@ -293,7 +283,7 | |||
|
293 | 283 | activemodel (>= 6.0.0) |
|
294 | 284 | bindex (>= 0.4.0) |
|
295 | 285 | railties (>= 6.0.0) |
|
296 |
- webdrivers (5. |
|
|
286 | + webdrivers (5.1.0) | |
|
297 | 287 | nokogiri (~> 1.6) |
|
298 | 288 | rubyzip (>= 1.3.0) |
|
299 | 289 | selenium-webdriver (~> 4.0) |
@@ -306,7 +296,6 | |||
|
306 | 296 | zeitwerk (2.6.0) |
|
307 | 297 | |
|
308 | 298 | PLATFORMS |
|
309 | - x86_64-darwin-20 | |
|
310 | 299 | x86_64-linux |
|
311 | 300 | |
|
312 | 301 | DEPENDENCIES |
@@ -315,9 +304,9 | |||
|
315 | 304 | best_in_place! |
|
316 | 305 | bootsnap |
|
317 | 306 | bootstrap (~> 5.2) |
|
307 | + byebug | |
|
318 | 308 | capybara |
|
319 | 309 | coffee-rails |
|
320 | - debug | |
|
321 | 310 | dynamic_form |
|
322 | 311 | fuzzy-string-match |
|
323 | 312 | haml |
@@ -1,5 +1,6 | |||
|
1 | 1 | //main entry point for sprocket |
|
2 | - //= require jquery | |
|
2 | + //= require jquery3 | |
|
3 | + //= require jquery_ujs | |
|
3 | 4 | //= require moment |
|
4 | 5 | //= require moment/th |
|
5 | 6 | //= require ace-rails-ap |
@@ -26,6 +26,7 | |||
|
26 | 26 | |
|
27 | 27 | //bootstrap |
|
28 | 28 | //@import "bootstrap-sprockets"; |
|
29 | + @import "my_bootstrap_var"; | |
|
29 | 30 | @import "bootstrap"; |
|
30 | 31 | @import "select2/select2.min"; |
|
31 | 32 | @import "select2/select2-bootstrap-5-theme.min"; |
@@ -43,6 +44,7 | |||
|
43 | 44 | @import 'material_icons'; |
|
44 | 45 | |
|
45 | 46 | //bootstrap navbar color (from) |
|
47 | + /* | |
|
46 | 48 | $bgDefault: #19197b; |
|
47 | 49 | $bgHighlight: #06064b; |
|
48 | 50 | $colDefault: #8e8eb4; |
@@ -57,6 +59,9 | |||
|
57 | 59 | font-path('bootstrap/glyphicons-halflings-regular.ttf') format('truetype'), |
|
58 | 60 | font-path('bootstrap/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg'); |
|
59 | 61 |
|
|
62 | + */ | |
|
63 | + | |
|
64 | + @import 'my_custom' | |
|
60 | 65 | |
|
61 | 66 | /* |
|
62 | 67 | .navbar-default { |
@@ -176,425 +181,5 | |||
|
176 | 181 | } |
|
177 | 182 | } |
|
178 | 183 | } |
|
179 | - | |
|
180 | 184 | */ |
|
181 | - .secondnavbar { | |
|
182 | - top: 50px; | |
|
183 | - } | |
|
184 | - | |
|
185 | - // --------------- bootstrap file upload ---------------------- | |
|
186 | - .btn-file { | |
|
187 | - position: relative; | |
|
188 | - overflow: hidden; | |
|
189 | - } | |
|
190 | - | |
|
191 | - .btn-file input[type=file] { | |
|
192 | - position: absolute; | |
|
193 | - top: 0; | |
|
194 | - right: 0; | |
|
195 | - min-width: 100%; | |
|
196 | - min-height: 100%; | |
|
197 | - font-size: 100px; | |
|
198 | - text-align: right; | |
|
199 | - filter: alpha(opacity = 0); | |
|
200 | - opacity: 0; | |
|
201 | - outline: none; | |
|
202 | - background: white; | |
|
203 | - cursor: inherit; | |
|
204 | - display: block; | |
|
205 | - } | |
|
206 | - | |
|
207 | - body { | |
|
208 | - background: white image-url("topbg.jpg") repeat-x top center; | |
|
209 | - | |
|
210 | - //font-size: 13px | |
|
211 | - //font-family: Tahoma, "sans-serif" | |
|
212 | - margin: 10px; | |
|
213 | - padding: 10px; | |
|
214 | - padding-top: 60px; | |
|
215 | - } | |
|
216 | - | |
|
217 | - // ------------------ bootstrap sortable -------------------- | |
|
218 | - table.sortable th { | |
|
219 | - padding-right: 20px !important; | |
|
220 | - | |
|
221 | - span.sign { | |
|
222 | - right: (-15px) !important; | |
|
223 | - } | |
|
224 | - | |
|
225 | - &.text-right { | |
|
226 | - padding-left: 20px !important; | |
|
227 | - padding-right: 8px !important; | |
|
228 | - | |
|
229 | - &:after, span.sign { | |
|
230 | - left: (-15px) !important; | |
|
231 | - } | |
|
232 | - } | |
|
233 | - } | |
|
234 | - | |
|
235 | - input { | |
|
236 | - font-family: Tahoma, "sans-serif"; | |
|
237 | - } | |
|
238 | - | |
|
239 | - h1 { | |
|
240 | - font-size: 24px; | |
|
241 | - color: #334488; | |
|
242 | - line-height: 2em; | |
|
243 | - } | |
|
244 | - | |
|
245 | - h2 { | |
|
246 | - font-size: 18px; | |
|
247 | - color: #5566bb; | |
|
248 | - line-height: 1.5em; | |
|
249 | - } | |
|
250 | - | |
|
251 | - hr { | |
|
252 | - border-top: 1px solid #dddddd; | |
|
253 | - border-bottom: 1px solid #eeeeee; | |
|
254 | - } | |
|
255 | - | |
|
256 | - //#a | |
|
257 | - // color: #6666cc | |
|
258 | - // text-decoration: none | |
|
259 | - // | |
|
260 | - // &:link, &:visited | |
|
261 | - // color: #6666cc | |
|
262 | - // text-decoration: none | |
|
263 | - // | |
|
264 | - // &:hover, &:focus | |
|
265 | - // color: #111166 | |
|
266 | - // text-decoration: none | |
|
267 | - | |
|
268 | - div { | |
|
269 | - &.userbar { | |
|
270 | - line-height: 1.5em; | |
|
271 | - text-align: right; | |
|
272 | - font-size: 12px; | |
|
273 | - } | |
|
274 | - | |
|
275 | - &.title { | |
|
276 | - padding: 10px 0px; | |
|
277 | - line-height: 1.5em; | |
|
278 | - font-size: 13px; | |
|
279 | - | |
|
280 | - span.contest-over-msg { | |
|
281 | - font-size: 15px; | |
|
282 | - color: red; | |
|
283 | - } | |
|
284 | - | |
|
285 | - table { | |
|
286 | - width: 100%; | |
|
287 | - font-weight: bold; | |
|
288 | - } | |
|
289 | - | |
|
290 | - td { | |
|
291 | - &.left-col { | |
|
292 | - text-align: left; | |
|
293 | - vertical-align: top; | |
|
294 | - color: #444444; | |
|
295 | - } | |
|
296 | - | |
|
297 | - &.right-col { | |
|
298 | - text-align: right; | |
|
299 | - vertical-align: top; | |
|
300 | - font-size: 18px; | |
|
301 | - color: #116699; | |
|
302 | - } | |
|
303 | - } | |
|
304 | - } | |
|
305 | - } | |
|
306 | - | |
|
307 | - table.info { | |
|
308 | - margin: 10px 0; | |
|
309 | - border: 1px solid #666666; | |
|
310 | - border-collapse: collapse; | |
|
311 | - font-size: 12px; | |
|
312 | - | |
|
313 | - th { | |
|
314 | - border: 1px solid #666666; | |
|
315 | - line-height: 1.5em; | |
|
316 | - padding: 0 0.5em; | |
|
317 | - } | |
|
318 | - | |
|
319 | - td { | |
|
320 | - border-left: 1px solid #666666; | |
|
321 | - border-right: 1px solid #666666; | |
|
322 | - line-height: 1.5em; | |
|
323 | - padding: 0 0.5em; | |
|
324 | - } | |
|
325 | - } | |
|
326 | - | |
|
327 | - tr { | |
|
328 | - &.info-head { | |
|
329 | - background: #777777; | |
|
330 | - color: white; | |
|
331 | - } | |
|
332 | - | |
|
333 | - &.info-odd { | |
|
334 | - background: #eeeeee; | |
|
335 | - } | |
|
336 | - | |
|
337 | - &.info-even { | |
|
338 | - background: #fcfcfc; | |
|
339 | - } | |
|
340 | - } | |
|
341 | - | |
|
342 | - @mixin basicbox { | |
|
343 | - background: #eeeeff; | |
|
344 | - border: 1px dotted #99aaee; | |
|
345 | - padding: 5px; | |
|
346 | - margin: 10px 0px; | |
|
347 | - color: black; | |
|
348 | - font-size: 13px; | |
|
349 | - } | |
|
350 | - | |
|
351 | - .infobox { | |
|
352 | - @include basicbox; | |
|
353 | - } | |
|
354 | - | |
|
355 | - .submitbox { | |
|
356 | - @include basicbox; | |
|
357 | - } | |
|
358 | - | |
|
359 | - .errorExplanation { | |
|
360 | - border: 1px dotted gray; | |
|
361 | - color: #bb2222; | |
|
362 | - padding: 5px 15px 5px 15px; | |
|
363 | - margin-bottom: 5px; | |
|
364 | - background-color: white; | |
|
365 | - font-weight: normal; | |
|
366 | - | |
|
367 | - h2 { | |
|
368 | - color: #cc1111; | |
|
369 | - font-weight: bold; | |
|
370 | - } | |
|
371 | - } | |
|
372 | - | |
|
373 | - table.uinfo { | |
|
374 | - border-collapse: collapse; | |
|
375 | - border: 1px solid black; | |
|
376 | - font-size: 13px; | |
|
377 | - } | |
|
378 | - | |
|
379 | - td.uinfo { | |
|
380 | - vertical-align: top; | |
|
381 | - border: 1px solid black; | |
|
382 | - padding: 5px; | |
|
383 | - } | |
|
384 | 185 | |
|
385 | - th.uinfo { | |
|
386 | - background: lightgreen; | |
|
387 | - vertical-align: top; | |
|
388 | - text-align: right; | |
|
389 | - border: 1px solid black; | |
|
390 | - padding: 5px; | |
|
391 | - } | |
|
392 | - | |
|
393 | - div { | |
|
394 | - &.compilermsgbody { | |
|
395 | - font-family: monospace; | |
|
396 | - } | |
|
397 | - | |
|
398 | - &.task-menu { | |
|
399 | - text-align: center; | |
|
400 | - font-size: 13px; | |
|
401 | - line-height: 1.75em; | |
|
402 | - font-weight: bold; | |
|
403 | - border-top: 1px dashed gray; | |
|
404 | - border-bottom: 1px dashed gray; | |
|
405 | - margin-top: 2px; | |
|
406 | - margin-bottom: 4px; | |
|
407 | - } | |
|
408 | - } | |
|
409 | - | |
|
410 | - table.taskdesc { | |
|
411 | - border: 2px solid #dddddd; | |
|
412 | - border-collapse: collapse; | |
|
413 | - margin: 10px auto; | |
|
414 | - width: 90%; | |
|
415 | - font-size: 13px; | |
|
416 | - | |
|
417 | - p { | |
|
418 | - font-size: 13px; | |
|
419 | - } | |
|
420 | - | |
|
421 | - tr.name { | |
|
422 | - border: 2px solid #dddddd; | |
|
423 | - background: #dddddd; | |
|
424 | - color: #333333; | |
|
425 | - font-weight: bold; | |
|
426 | - font-size: 14px; | |
|
427 | - line-height: 1.5em; | |
|
428 | - text-align: center; | |
|
429 | - } | |
|
430 | - | |
|
431 | - td { | |
|
432 | - &.desc-odd { | |
|
433 | - padding: 5px; | |
|
434 | - padding-left: 20px; | |
|
435 | - background: #fefeee; | |
|
436 | - } | |
|
437 | - | |
|
438 | - &.desc-even { | |
|
439 | - padding: 5px; | |
|
440 | - padding-left: 20px; | |
|
441 | - background: #feeefe; | |
|
442 | - } | |
|
443 | - } | |
|
444 | - } | |
|
445 | - | |
|
446 | - .announcementbox { | |
|
447 | - margin: 10px 0px; | |
|
448 | - background: #bbddee; | |
|
449 | - padding: 1px; | |
|
450 | - | |
|
451 | - span.title { | |
|
452 | - font-weight: bold; | |
|
453 | - color: #224455; | |
|
454 | - padding-left: 10px; | |
|
455 | - line-height: 1.6em; | |
|
456 | - } | |
|
457 | - } | |
|
458 | - | |
|
459 | - .announcement { | |
|
460 | - margin: 2px; | |
|
461 | - background: white; | |
|
462 | - padding: 1px; | |
|
463 | - padding-left: 10px; | |
|
464 | - padding-right: 10px; | |
|
465 | - padding-top: 5px; | |
|
466 | - padding-bottom: 5px; | |
|
467 | - } | |
|
468 | - | |
|
469 | - .announcement p { | |
|
470 | - font-size: 12px; | |
|
471 | - margin: 2px; | |
|
472 | - } | |
|
473 | - | |
|
474 | - .pub-info { | |
|
475 | - text-align: right; | |
|
476 | - font-style: italic; | |
|
477 | - font-size: 9px; | |
|
478 | - | |
|
479 | - p { | |
|
480 | - text-align: right; | |
|
481 | - font-style: italic; | |
|
482 | - font-size: 9px; | |
|
483 | - } | |
|
484 | - } | |
|
485 | - | |
|
486 | - .announcement { | |
|
487 | - .toggles { | |
|
488 | - font-weight: normal; | |
|
489 | - float: right; | |
|
490 | - font-size: 80%; | |
|
491 | - } | |
|
492 | - | |
|
493 | - .announcement-title { | |
|
494 | - font-weight: bold; | |
|
495 | - } | |
|
496 | - } | |
|
497 | - | |
|
498 | - div { | |
|
499 | - &.message { | |
|
500 | - margin: 10px 0 0; | |
|
501 | - | |
|
502 | - div { | |
|
503 | - &.message { | |
|
504 | - margin: 0 0 0 30px; | |
|
505 | - } | |
|
506 | - | |
|
507 | - &.body { | |
|
508 | - border: 2px solid #dddddd; | |
|
509 | - background: #fff8f8; | |
|
510 | - padding-left: 5px; | |
|
511 | - } | |
|
512 | - | |
|
513 | - &.reply-body { | |
|
514 | - border: 2px solid #bbbbbb; | |
|
515 | - background: #fffff8; | |
|
516 | - padding-left: 5px; | |
|
517 | - } | |
|
518 | - | |
|
519 | - &.stat { | |
|
520 | - font-size: 10px; | |
|
521 | - line-height: 1.75em; | |
|
522 | - padding: 0 5px; | |
|
523 | - color: #333333; | |
|
524 | - background: #dddddd; | |
|
525 | - font-weight: bold; | |
|
526 | - } | |
|
527 | - | |
|
528 | - &.message div.stat { | |
|
529 | - font-size: 10px; | |
|
530 | - line-height: 1.75em; | |
|
531 | - padding: 0 5px; | |
|
532 | - color: #444444; | |
|
533 | - background: #bbbbbb; | |
|
534 | - font-weight: bold; | |
|
535 | - } | |
|
536 | - } | |
|
537 | - } | |
|
538 | - | |
|
539 | - &.contest-title { | |
|
540 | - color: white; | |
|
541 | - text-align: center; | |
|
542 | - line-height: 2em; | |
|
543 | - } | |
|
544 | - | |
|
545 | - &.registration-desc, &.test-desc { | |
|
546 | - border: 1px dotted gray; | |
|
547 | - background: #f5f5f5; | |
|
548 | - padding: 5px; | |
|
549 | - margin: 10px 0; | |
|
550 | - font-size: 12px; | |
|
551 | - line-height: 1.5em; | |
|
552 | - } | |
|
553 | - } | |
|
554 | - | |
|
555 | - h2.contest-title { | |
|
556 | - margin-top: 5px; | |
|
557 | - margin-bottom: 5px; | |
|
558 | - } | |
|
559 | - | |
|
560 | - | |
|
561 | - | |
|
562 | - .grader-comment { | |
|
563 | - word-wrap: break-word; | |
|
564 | - } | |
|
565 | - | |
|
566 | - | |
|
567 | - golden-btn + .golden-btn { margin-top: 1em; } | |
|
568 | - | |
|
569 | - .golden-btn { | |
|
570 | - display: inline-block; | |
|
571 | - outline: none; | |
|
572 | - font-family: inherit; | |
|
573 | - box-sizing: border-box; | |
|
574 | - border: none; | |
|
575 | - box-shadow: 0 3px 6px rgba(0,0,0,.16), 0 3px 6px rgba(110,80,20,.4), | |
|
576 | - inset 0 -2px 5px 1px rgba(139,66,8,1), | |
|
577 | - inset 0 -1px 1px 3px rgba(250,227,133,1); | |
|
578 | - background-image: linear-gradient(160deg, #a54e07, #b47e11, #fef1a2, #bc881b, #a54e07) !important; | |
|
579 | - border: 1px solid #a55d07; | |
|
580 | - color: rgb(120,50,5); | |
|
581 | - text-shadow: 0 2px 2px rgba(250, 227, 133, 1); | |
|
582 | - cursor: pointer; | |
|
583 | - transition: all .2s ease-in-out; | |
|
584 | - background-size: 100% 100%; | |
|
585 | - background-position:center; | |
|
586 | - } | |
|
587 | - .golden-btn:focus, | |
|
588 | - .golden-btn:hover { | |
|
589 | - background-size: 150% 150%; | |
|
590 | - box-shadow: 0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23), | |
|
591 | - inset 0 -2px 5px 1px #b17d10, | |
|
592 | - inset 0 -1px 1px 3px rgba(250,227,133,1); | |
|
593 | - border: 1px solid rgba(165,93,7,.6); | |
|
594 | - color: rgba(120,50,5,.8); | |
|
595 | - } | |
|
596 | - .golden-btn:active { | |
|
597 | - box-shadow: 0 3px 6px rgba(0,0,0,.16), 0 3px 6px rgba(110,80,20,.4), | |
|
598 | - inset 0 -2px 5px 1px #b17d10, | |
|
599 | - inset 0 -1px 1px 3px rgba(250,227,133,1); | |
|
600 | - } |
@@ -3,20 +3,16 | |||
|
3 | 3 | //import "controllers" |
|
4 | 4 | // |
|
5 | 5 | |
|
6 | - //import "my_sprocket" | |
|
7 | - import "pdfmake" | |
|
8 | - import "pdfmake-vfs" | |
|
9 | - import "jszip" | |
|
10 | 6 | |
|
11 | 7 |
|
|
12 | 8 | import "bootstrap" |
|
13 | 9 | window.bootstrap = bootstrap |
|
14 | - console.log($); // ok | |
|
15 | - console.log(bootstrap) | |
|
16 | - console.log(JSZip); | |
|
17 | 10 | |
|
18 | 11 | //datatable |
|
19 | 12 | //import 'datatables-bundle' |
|
13 | + import "pdfmake" | |
|
14 | + import "pdfmake-vfs" | |
|
15 | + import "jszip" | |
|
20 | 16 | import "datatables" |
|
21 | 17 | import "datatables-bs5" |
|
22 | 18 | import "datatables-editor" |
@@ -49,10 +45,6 | |||
|
49 | 45 | |
|
50 | 46 | import "select2" |
|
51 | 47 | |
|
52 | - //import "ace-rails-ap" | |
|
53 | - //import "ace/theme-merbivore" | |
|
54 | - //import "ace/mode-python" | |
|
55 | - | |
|
56 | 48 | //my own customization |
|
57 | 49 | import 'custom' |
|
58 | 50 |
@@ -8,7 +8,12 | |||
|
8 | 8 | |
|
9 | 9 | $(function() { |
|
10 | 10 | var e; |
|
11 |
- $(".select2").select2({ |
|
|
11 | + $(".select2").select2({ | |
|
12 | + theme: "bootstrap-5", | |
|
13 | + //selectionCssClass: "select2--small", | |
|
14 | + //dropdownCssClass: "select2--small", | |
|
15 | + }); | |
|
16 | + | |
|
12 | 17 | $('.btn-file :file').on('fileselect', function(event, numFiles, label) { |
|
13 | 18 | var input, log; |
|
14 | 19 | input = $(this).parents('.input-group').find(':text'); |
@@ -1,3 +1,3 | |||
|
1 | 1 | class ApplicationRecord < ActiveRecord::Base |
|
2 |
- |
|
|
2 | + primary_abstract_class | |
|
3 | 3 | end |
@@ -1,4 +1,4 | |||
|
1 |
- class Submission < A |
|
|
1 | + class Submission < ApplicationRecord | |
|
2 | 2 | |
|
3 | 3 | enum tag: {default: 0, model: 1}, _prefix: true |
|
4 | 4 | |
@@ -91,7 +91,7 | |||
|
91 | 91 | def self.find_language_in_source(source, source_filename="") |
|
92 | 92 | langopt = find_option_in_source(/^LANG:/,source) |
|
93 | 93 | if langopt |
|
94 |
- return (Language.find_by_name(langopt) || |
|
|
94 | + return (Language.find_by_name(langopt) || | |
|
95 | 95 | Language.find_by_pretty_name(langopt)) |
|
96 | 96 | else |
|
97 | 97 | if source_filename |
@@ -143,14 +143,14 | |||
|
143 | 143 | return if self.problem!=nil and self.problem.output_only |
|
144 | 144 | |
|
145 | 145 | if self.language == nil |
|
146 |
- errors.add( |
|
|
146 | + errors.add(:source,:invalid,message: "Cannot detect language. Did you submit a correct source file?") | |
|
147 | 147 | end |
|
148 | 148 | end |
|
149 | 149 | |
|
150 | 150 | def must_have_valid_problem |
|
151 | 151 | return if self.source==nil |
|
152 | 152 | if self.problem==nil |
|
153 | - errors.add('problem',"must be specified.") | |
|
153 | + errors.add(:problem,:blank,'aaa') | |
|
154 | 154 | else |
|
155 | 155 | #admin always have right |
|
156 | 156 | return if self.user.admin? |
@@ -12,14 +12,7 | |||
|
12 | 12 | = " (#{submission.language.pretty_name}) " |
|
13 | 13 | = link_to '[load]', download_submission_path(submission) |
|
14 | 14 | %td |
|
15 | - - if submission.graded_at | |
|
16 | - = "Graded at #{format_short_time(submission.graded_at)}." | |
|
17 | - %br/ | |
|
18 | - = "Score: #{(submission.points*100/submission.problem.full_score).to_i} " if GraderConfiguration['ui.show_score'] | |
|
19 | - = " [" | |
|
20 | - %tt | |
|
21 | - = submission.grader_comment | |
|
22 | - = "]" | |
|
15 | + = render 'submission_short', submission: submission, show_button: false, problem_id: submission&.problem&.id | |
|
23 | 16 | %td |
|
24 | 17 | = render :partial => 'compiler_message', :locals => {:compiler_message => submission.compiler_message } |
|
25 | 18 | %td |
@@ -1,32 +1,33 | |||
|
1 | 1 | - if submission.nil? |
|
2 | 2 | = "-" |
|
3 | 3 | - else |
|
4 | - %strong= "Submission ID:" | |
|
5 | - = submission.id | |
|
6 | - %br | |
|
4 | + - if local_assigns[:show_id] | |
|
5 | + .row | |
|
6 | + .col-3.text-secondary | |
|
7 | + Sub ID: | |
|
8 | + %strong.col-9= submission.id | |
|
7 | 9 | - unless submission.graded_at |
|
8 | - %strong= t 'main.submitted_at:' | |
|
9 | - = format_full_time_ago(submission.submitted_at.localtime) | |
|
10 | + .row | |
|
11 | + .col-3.text-secondary= t 'main.submitted_at' | |
|
12 | + %strong.col-9= format_full_time_ago(submission.submitted_at.localtime) | |
|
10 | 13 | - else |
|
11 | - %strong= t 'main.graded_at:' | |
|
12 | - = format_full_time_ago(submission.graded_at.localtime) | |
|
13 | - %br | |
|
14 | + .row | |
|
15 | + .col-3.text-secondary= t 'main.graded_at' | |
|
16 | + %strong.col-9= format_full_time_ago(submission.graded_at.localtime) | |
|
14 | 17 | - if GraderConfiguration['ui.show_score'] |
|
15 | - %strong=t 'main.score' | |
|
16 | - = "#{(submission.points*100/submission.problem.full_score).to_i} " | |
|
17 | - = " [" | |
|
18 | - %tt | |
|
19 |
- |
|
|
20 | - = "]" | |
|
21 | - %br | |
|
22 | - %strong View: | |
|
23 | - - if GraderConfiguration.show_grading_result | |
|
24 | - = link_to '[detailed result]', :action => 'result', :id => submission.id | |
|
25 | - - if submission.graded_at | |
|
26 |
- = link_to "#{t 'main. |
|
|
27 | - -# | |
|
28 | - %button.btn.btn-info.btn-xs{type: 'button', data: {toggle: 'modal', target: '#compiler'}} | |
|
29 | - =t 'main.cmp_msg' | |
|
30 | - = link_to "#{t 'main.src_link'}", download_submission_path(submission.id), class: 'btn btn-xs btn-info' | |
|
31 | - = link_to "#{t 'main.submissions_link'}", problem_submissions_path(problem_id), class: 'btn btn-xs btn-info' | |
|
18 | + .row | |
|
19 | + .col-3.text-secondary=t 'main.score' | |
|
20 | + %strong.col-9 | |
|
21 | + = (submission.points*100/submission.problem.full_score).to_i | |
|
22 | + %tt.grader-comment | |
|
23 | + = " [#{submission.grader_comment}]" | |
|
24 | + - if local_assigns[:show_button] | |
|
25 | + - if submission.graded_at | |
|
26 | + - if GraderConfiguration.show_grading_result | |
|
27 | + = link_to '[detailed result]', :action => 'result', :id => submission.id | |
|
28 | + = link_to "#{t 'main.cmp_msg'}", compiler_msg_submission_path(submission), {popup: true,remote: true,class: 'btn btn-sm btn-info'} | |
|
29 | + = link_to "#{t 'main.src_link'}",download_submission_path(submission), class: 'btn btn-sm btn-info' | |
|
30 | + = link_to "#{t 'main.submissions_link'}", problem_submissions_path(submission.problem.id), class: 'btn btn-sm btn-info' | |
|
31 | + - if GraderConfiguration.show_testcase | |
|
32 | + = link_to "testcases", show_problem_testcases_path(submission.problem.id), class: 'btn btn-sm btn-info' | |
|
32 | 33 |
@@ -14,7 +14,9 | |||
|
14 | 14 | -# %script{src:"https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js",integrity:"sha384-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3",crossorigin:"anonymous"} |
|
15 | 15 | -# %script{src:"https://cdn.jsdelivr.net/npm/bootstrap@5.2.1/dist/js/bootstrap.bundle.min.js",integrity:"sha384-7VPbUDkoPSGFnVtYi0QogXtr74QeVeeIs99Qfg5YCF+TidwNdjvaKZX19NZ/e6oz",crossorigin:"anonymous"} |
|
16 | 16 | |
|
17 | - | |
|
17 | + <link rel="preconnect" href="https://fonts.googleapis.com"> | |
|
18 | + <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> | |
|
19 | + <link href="https://fonts.googleapis.com/css2?family=Bai+Jamjuree:ital@0;1&family=Krub:ital,wght@0,200;0,400;0,600;1,200;1,400;1,600&family=Sarabun:ital,wght@0,200;0,400;0,600;1,200;1,400;1,600&display=swap" rel="stylesheet"> | |
|
18 | 20 | |
|
19 | 21 | %body |
|
20 | 22 | - unless local_assigns[:skip_header] |
@@ -1,8 +1,9 | |||
|
1 | - .card-body | |
|
1 | + %li.list-group-item | |
|
2 | 2 | .card-title |
|
3 | - = announcement.title | |
|
4 | - - if @current_user and @current_user.admin? | |
|
5 | - = link_to 'Edit', edit_announcement_path(announcement), class: 'btn btn-xs btn-default' | |
|
3 | + %h1 | |
|
4 | + = announcement.title | |
|
5 | + - if @current_user and @current_user.admin? | |
|
6 | + = link_to 'Edit', edit_announcement_path(announcement), class: 'btn btn-sm btn-outline-secondary' | |
|
6 | 7 | .card-subtitle |
|
7 | 8 | = "(updated #{time_ago_in_words(announcement.updated_at)} ago on #{announcement.updated_at})" |
|
8 | 9 | .card-text |
@@ -13,8 +13,8 | |||
|
13 | 13 | = @prob_submissions[problem.id][:count] |
|
14 | 14 | -#= link_to "[subs]", main_submission_path(problem.id) |
|
15 | 15 | %td |
|
16 |
- = render |
|
|
17 |
- |
|
|
16 | + = render partial: 'submission_short', | |
|
17 | + locals: {:submission => @prob_submissions[problem.id][:submission], :problem_name => problem.name, :problem_id => problem.id, show_button: true } | |
|
18 | 18 | %td |
|
19 | 19 | - if @prob_submissions[problem.id][:submission] |
|
20 | 20 | = link_to 'Edit', edit_submission_path(@prob_submissions[problem.id][:submission]), class: 'btn btn-success' |
@@ -47,13 +47,13 | |||
|
47 | 47 | .card |
|
48 | 48 | .card-header |
|
49 | 49 | Announcement |
|
50 |
- = link_to 'Manage', announcements_path, class: 'btn btn-sm |
|
|
51 | - .card-body | |
|
50 | + = link_to 'Manage', announcements_path, class: 'btn btn-secondary btn-sm' | |
|
51 | + %ul.list-group.list-group-flush | |
|
52 | 52 | = render :partial => 'announcement', :collection => @announcements |
|
53 | - | |
|
54 |
- |
|
|
55 | - = "Announcement.refreshUrl = '#{url_for :controller => 'main', :action => 'announcements'}';" | |
|
56 | - Announcement.registerRefreshEventTimer(); | |
|
53 | + -# | |
|
54 | + %script{:type => 'text/javascript'} | |
|
55 | + = "Announcement.refreshUrl = '#{url_for :controller => 'main', :action => 'announcements'}';".html_safe | |
|
56 | + Announcement.registerRefreshEventTimer(); | |
|
57 | 57 | |
|
58 | 58 | .modal.fade#compiler{tabindex: -1,role: 'dialog'} |
|
59 | 59 | .modal-dialog.modal-lg{role:'document'} |
@@ -1,4 +1,4 | |||
|
1 | 1 | :plain |
|
2 | 2 | $("#compiler_msg").html("#{j @submission.compiler_message}"); |
|
3 | - $("#compiler").modal(); | |
|
3 | + $("#compiler").modal('show'); | |
|
4 | 4 |
@@ -12,41 +12,44 | |||
|
12 | 12 | .col-md-8 |
|
13 | 13 | %div#editor{style: 'height: 500px; border-radius: 7px; font-size: 14px;'} |
|
14 | 14 | .col-md-4 |
|
15 |
- - |
|
|
16 | - = form_tag({controller: :main, :action => 'submit'}, :multipart => true, class: 'form') do | |
|
17 | - | |
|
18 | - = hidden_field_tag 'editor_text', @source | |
|
19 | - = hidden_field_tag 'submission[problem_id]', @problem.id | |
|
20 | - .form-group | |
|
21 | - = label_tag "Task:" | |
|
22 | - = text_field_tag 'asdf', "#{@problem.long_name}", class: 'form-control', disabled: true | |
|
23 | - .form-group | |
|
24 | - = label_tag "Description:" | |
|
25 | - = link_to_description_if_any "[download] <span class='glyphicon glyphicon-file'></span>".html_safe, @problem | |
|
15 | + -# submission form | |
|
16 | + .card.mb-3 | |
|
17 | + .card-header | |
|
18 | + Submission | |
|
19 | + .card-body | |
|
20 | + = form_with url: submit_main_path, :multipart => true, class: 'form' do |form| | |
|
21 | + = hidden_field_tag 'editor_text', @source | |
|
22 | + = hidden_field_tag 'submission[problem_id]', @problem.id | |
|
23 | + .row.mb-2 | |
|
24 | + .col-md-4 | |
|
25 | + = form.label "Task", class: 'col-form-label text-secondary' | |
|
26 | + .col-md-8 | |
|
27 | + = form.label nil, "#{@problem.long_name}", class: 'col-form-label fw-bold' | |
|
28 | + .row.mb-2 | |
|
29 | + .col-md-4 | |
|
30 | + = form.label "Description", class: 'col-form-label text-secondary' | |
|
31 | + .col-md-8 | |
|
32 | + = link_to_description_if_any "[download] <span class='mi'>description</span>".html_safe, @problem | |
|
33 | + .row.mb-2 | |
|
34 | + .col-md-4 | |
|
35 | + = form.label :language_id, 'Language', class: 'col-form-label text-secondary' | |
|
36 | + .col-md-8 | |
|
37 | + = form.select :language_id, options_from_collection_for_select(Language.all, 'id', 'pretty_name', @lang_id || @current_user.default_language || Language.find_by_pretty_name("Python").id || Language.first.id), {}, class: 'form-select', style: "width: 100px", id: 'language_id' | |
|
38 | + .row.mb-2 | |
|
39 | + .col-12 | |
|
40 | + = form.file_field :load_file, class: 'form-control', id: 'load_file' | |
|
41 | + .row.mb-2 | |
|
42 | + .col-12 | |
|
43 | + = submit_tag 'Submit', class: 'btn ' + (@submission && @submission.number >= 100 ? 'golden-btn' : 'btn-success'), id: 'live_submit', | |
|
44 | + data: {confirm: "Submitting this source code for task #{@problem.long_name}?"} | |
|
26 | 45 | |
|
27 | - .form-group | |
|
28 | - = label_tag 'Language:' | |
|
29 | - = select_tag 'language_id', options_from_collection_for_select(Language.all, 'id', 'pretty_name', @lang_id || @current_user.default_language || Language.find_by_pretty_name("Python").id || Language.first.id), class: 'form-control select', style: "width: 100px" | |
|
30 | - .form-group | |
|
31 | - .input-group | |
|
32 | - %span.input-group-btn | |
|
33 | - %span.btn.btn-default.btn-file | |
|
34 | - Browse | |
|
35 | - = file_field_tag 'load_file' | |
|
36 | - = text_field_tag '' , nil, {readonly: true, class: 'form-control'} | |
|
37 | - .form-group | |
|
38 | - = submit_tag 'Submit', class: 'btn ' + (@submission && @submission.number >= 100 ? 'golden-btn' : 'btn-success'), id: 'live_submit', | |
|
39 | - data: {confirm: "Submitting this source code for task #{@problem.long_name}?"} | |
|
40 | - - # latest submission status | |
|
41 | - .panel{class: (@submission && @submission.graded_at) ? "panel-info" : "panel-warning"} | |
|
42 | - .panel-heading | |
|
46 | + -# latest submission status | |
|
47 | + .card | |
|
48 | + .card-header.text-bg-info.border-info | |
|
43 | 49 | Latest Submission Status |
|
44 |
- = link_to "Refresh",get_latest_submission_status_submissions_path(@submission.user,@problem), class: "btn btn- |
|
|
45 |
- . |
|
|
46 |
- |
|
|
47 | - - if @submission | |
|
48 | - = render :partial => 'submission_short', | |
|
49 | - :locals => {submission: @submission, problem_name: @problem.name, problem_id: @problem.id } | |
|
50 | + = link_to "Refresh",get_latest_submission_status_submissions_path(@submission.user,@problem), id: 'refresh', class: "btn btn-light btn-sm", remote: true if @submission | |
|
51 | + .card-body | |
|
52 | + #latest_status | |
|
50 | 53 | |
|
51 | 54 | .modal.fade#compiler{tabindex: -1,role: 'dialog'} |
|
52 | 55 | .modal-dialog.modal-lg{role:'document'} |
@@ -64,7 +67,7 | |||
|
64 | 67 | |
|
65 | 68 | :javascript |
|
66 | 69 | $(document).ready(function() { |
|
67 | - e = ace.edit("editor") | |
|
70 | + var e = ace.edit("editor") | |
|
68 | 71 | e.setValue($("#text_sourcecode").val()); |
|
69 | 72 | e.gotoLine(1); |
|
70 | 73 | $("#language_id").trigger('change'); |
@@ -80,7 +83,36 | |||
|
80 | 83 | reader.readAsText(file) |
|
81 | 84 | }); |
|
82 | 85 | |
|
86 | + $("#live_submit").on("click", function(event) { | |
|
87 | + $("#editor_text").val(e.getValue()); | |
|
88 | + }); | |
|
89 | + | |
|
90 | + $("#language_id").on("change", function(event) { | |
|
91 | + text = $("#language_id option:selected").text(); | |
|
92 | + mode = 'ace/mode/c_cpp'; | |
|
93 | + switch (text) { | |
|
94 | + case 'Pascal': | |
|
95 | + mode = 'ace/mode/pascal'; | |
|
96 | + break; | |
|
97 | + case 'C++': | |
|
98 | + case 'C': | |
|
99 | + mode = 'ace/mode/c_cpp'; | |
|
100 | + break; | |
|
101 | + case 'Ruby': | |
|
102 | + mode = 'ace/mode/ruby'; | |
|
103 | + break; | |
|
104 | + case 'Python': | |
|
105 | + mode = 'ace/mode/python'; | |
|
106 | + break; | |
|
107 | + case 'Java': | |
|
108 | + mode = 'ace/mode/java'; | |
|
109 | + } | |
|
110 | + e.getSession().setMode(mode); | |
|
111 | + }); | |
|
112 | + | |
|
83 | 113 | //brython(); |
|
114 | + $('#refresh').click() | |
|
115 | + | |
|
84 | 116 | }); |
|
85 | 117 | |
|
86 | 118 |
@@ -1,2 +1,2 | |||
|
1 | 1 | :plain |
|
2 |
- $("#latest_status").html("#{j render({partial: 'submission_short', locals: {submission: @submission, |
|
|
2 | + $("#latest_status").html("#{j render({partial: 'submission_short', locals: {submission: @submission, show_id: true, show_button: true } })}") |
@@ -1,14 +1,16 | |||
|
1 | - .panel.panel-info | |
|
2 | - .panel-heading | |
|
1 | + .card.border-info.mb-2 | |
|
2 | + .card-header.text-bg-info.border-info | |
|
3 | 3 | Select Problems |
|
4 |
- . |
|
|
5 | - .form-inline | |
|
6 | - = select 'submission', | |
|
7 | - 'problem_id', | |
|
8 | - @problems.collect {|p| ["[#{p.name}] #{p.full_name}", problem_submissions_url(p.id)]}, | |
|
9 | - { selected: (@problem ? problem_submissions_url(@problem) : -1) }, | |
|
10 | - { class: 'select2 form-control'} | |
|
11 | - %button.btn.btn-primary.btn-sm.go-button#problem_go{data: {source: '#submission_problem_id'}} Go | |
|
4 | + .card-body | |
|
5 | + .row | |
|
6 | + .col-6 | |
|
7 | + = select 'submission', | |
|
8 | + 'problem_id', | |
|
9 | + @problems.collect {|p| ["[#{p.name}] #{p.full_name}", problem_submissions_url(p.id)]}, | |
|
10 | + { selected: (@problem ? problem_submissions_url(@problem) : -1) }, | |
|
11 | + { class: 'select2 form-control'} | |
|
12 | + .col-6 | |
|
13 | + %a.btn.btn-primary.go-button#problem_go{data: {source: '#submission_problem_id'}} Go | |
|
12 | 14 | |
|
13 | 15 | - if @problem!=nil |
|
14 | 16 | %h2= "Task: #{@problem.full_name} (#{@problem.name})" |
@@ -87,7 +87,7 | |||
|
87 | 87 | %td.text-right |
|
88 | 88 | %strong Compiler result |
|
89 | 89 | %td |
|
90 |
- %button.btn.btn-info.btn- |
|
|
90 | + %button.btn.btn-info.btn-sm{type: 'button', data: {toggle: 'modal', target: '#compiler'}} | |
|
91 | 91 | view |
|
92 | 92 | %tr |
|
93 | 93 | %td.text-right |
@@ -95,7 +95,7 | |||
|
95 | 95 | %td |
|
96 | 96 | = @task.status_str if @task |
|
97 | 97 | - if @current_user.admin? |
|
98 |
- = link_to "rejudge", rejudge_submission_path, data: {remote: true}, class: 'btn btn-info btn- |
|
|
98 | + = link_to "rejudge", rejudge_submission_path, data: {remote: true}, class: 'btn btn-info btn-sm' | |
|
99 | 99 | - if @current_user.has_role?('ta') |
|
100 | 100 | %tr |
|
101 | 101 | %td.text-right |
@@ -108,11 +108,11 | |||
|
108 | 108 | - if @submission.tag_model? |
|
109 | 109 | YES |
|
110 | 110 | - if @current_user.has_role?('ta') |
|
111 |
- = link_to "remove model status", set_tag_submission_path(@submission, tag: :default), class: 'btn btn-warning btn- |
|
|
111 | + = link_to "remove model status", set_tag_submission_path(@submission, tag: :default), class: 'btn btn-warning btn-sm' | |
|
112 | 112 | - else |
|
113 | 113 | No |
|
114 | 114 | - if @current_user.has_role?('ta') |
|
115 |
- = link_to "set as model solution", set_tag_submission_path(@submission, tag: :model), class: 'btn btn-success btn- |
|
|
115 | + = link_to "set as model solution", set_tag_submission_path(@submission, tag: :model), class: 'btn btn-success btn-sm' | |
|
116 | 116 | |
|
117 | 117 | |
|
118 | 118 | .modal.fade#compiler{tabindex: -1,role: 'dialog'} |
@@ -6,7 +6,8 | |||
|
6 | 6 | pin "my_sprocket" |
|
7 | 7 | pin_all_from "app/javascript/controllers", under: "controllers" |
|
8 | 8 | |
|
9 | - pin "jquery", to: 'jquery.js', preload: true | |
|
9 | + #we don't need jquery in importmap because we use sprocket version | |
|
10 | + #pin "jquery", to: 'jquery.js', preload: true | |
|
10 | 11 | pin "bootstrap", to: "bootstrap.bundle.min.js", preload: true |
|
11 | 12 | #no need popper, because bundled already in bootstrap |
|
12 | 13 | #pin "@popperjs/core", to: "https://ga.jspm.io/npm:@popperjs/core@2.11.6/lib/index.js" |
@@ -6,20 +6,20 | |||
|
6 | 6 | # |
|
7 | 7 | # Read the Guide for Upgrading Ruby on Rails for more info on each option. |
|
8 | 8 | |
|
9 | - Rails.application.config.action_controller.raise_on_unfiltered_parameters = true | |
|
9 | + #Rails.application.config.action_controller.raise_on_unfiltered_parameters = true | |
|
10 | 10 | |
|
11 | 11 | # Enable per-form CSRF tokens. Previous versions had false. |
|
12 | - Rails.application.config.action_controller.per_form_csrf_tokens = false | |
|
12 | + #Rails.application.config.action_controller.per_form_csrf_tokens = false | |
|
13 | 13 | |
|
14 | 14 | # Enable origin-checking CSRF mitigation. Previous versions had false. |
|
15 | - Rails.application.config.action_controller.forgery_protection_origin_check = false | |
|
15 | + #Rails.application.config.action_controller.forgery_protection_origin_check = false | |
|
16 | 16 | |
|
17 | 17 | # Make Ruby 2.4 preserve the timezone of the receiver when calling `to_time`. |
|
18 | 18 | # Previous versions had false. |
|
19 | - ActiveSupport.to_time_preserves_timezone = false | |
|
19 | + #ActiveSupport.to_time_preserves_timezone = false | |
|
20 | 20 | |
|
21 | 21 | # Require `belongs_to` associations by default. Previous versions had false. |
|
22 | - Rails.application.config.active_record.belongs_to_required_by_default = false | |
|
22 | + #Rails.application.config.active_record.belongs_to_required_by_default = false | |
|
23 | 23 | |
|
24 | 24 | # Do not halt callback chains when a callback returns false. Previous versions had true. |
|
25 | 25 | # ActiveSupport.halt_callback_chains_on_return_false = true |
@@ -42,10 +42,11 | |||
|
42 | 42 | start_soon: "The contest at your site will start soon. Please wait." |
|
43 | 43 | specified_in_header: "Specified in header" |
|
44 | 44 | |
|
45 |
- problem_desc: |
|
|
46 | - submitted_at: "Submitted at" | |
|
47 | - graded_at: "Graded at" | |
|
48 | - score: "score: " | |
|
45 | + problem_desc: desc | |
|
46 | + submission_id: Sub ID | |
|
47 | + submitted_at: Submitted | |
|
48 | + graded_at: Graded | |
|
49 | + score: score | |
|
49 | 50 | cmp_msg: "compiler msg" |
|
50 | 51 | src_link: "src" |
|
51 | 52 | submissions_link: "submissions" |
deleted file |
deleted file |
deleted file |
deleted file |
You need to be logged in to leave comments.
Login now