Description:
wip
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r870:9386e234b7f9 - - 29 files changed: 570 inserted, 666 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 + }
@@ -33,3 +33,5
33 #.ruby-version
33 #.ruby-version
34
34
35 /config/secrets.yml
35 /config/secrets.yml
36 +
37 + /.byebug_history
@@ -102,7 +102,7
102
102
103 group :development, :test do
103 group :development, :test do
104 # Call 'byebug' anywhere in the code to stop execution and get a debugger console
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 end
106 end
107
107
108 group :development do
108 group :development do
@@ -92,11 +92,12
92 bindex (0.8.1)
92 bindex (0.8.1)
93 bootsnap (1.13.0)
93 bootsnap (1.13.0)
94 msgpack (~> 1.2)
94 msgpack (~> 1.2)
95 - bootstrap (5.2.0)
95 + bootstrap (5.2.1)
96 autoprefixer-rails (>= 9.1.0)
96 autoprefixer-rails (>= 9.1.0)
97 - popper_js (>= 2.11.5, < 3)
97 + popper_js (>= 2.11.6, < 3)
98 sassc-rails (>= 2.0.0)
98 sassc-rails (>= 2.0.0)
99 builder (3.2.4)
99 builder (3.2.4)
100 + byebug (11.1.3)
100 capybara (3.37.1)
101 capybara (3.37.1)
101 addressable
102 addressable
102 matrix
103 matrix
@@ -116,9 +117,6
116 coffee-script-source (1.12.2)
117 coffee-script-source (1.12.2)
117 concurrent-ruby (1.1.10)
118 concurrent-ruby (1.1.10)
118 crass (1.0.6)
119 crass (1.0.6)
119 - debug (1.6.2)
120 - irb (>= 1.3.6)
121 - reline (>= 0.3.1)
122 digest (3.1.0)
120 digest (3.1.0)
123 dynamic_form (1.1.4)
121 dynamic_form (1.1.4)
124 erubi (1.11.0)
122 erubi (1.11.0)
@@ -149,9 +147,6
149 actionpack (>= 6.0.0)
147 actionpack (>= 6.0.0)
150 railties (>= 6.0.0)
148 railties (>= 6.0.0)
151 in_place_editing (1.2.0)
149 in_place_editing (1.2.0)
152 - io-console (0.5.11)
153 - irb (1.4.1)
154 - reline (>= 0.3.0)
155 jbuilder (2.11.5)
150 jbuilder (2.11.5)
156 actionview (>= 5.0.0)
151 actionview (>= 5.0.0)
157 activesupport (>= 5.0.0)
152 activesupport (>= 5.0.0)
@@ -162,7 +157,7
162 listen (3.0.8)
157 listen (3.0.8)
163 rb-fsevent (~> 0.9, >= 0.9.4)
158 rb-fsevent (~> 0.9, >= 0.9.4)
164 rb-inotify (~> 0.9, >= 0.9.7)
159 rb-inotify (~> 0.9, >= 0.9.7)
165 - loofah (2.18.0)
160 + loofah (2.19.0)
166 crass (~> 1.0.2)
161 crass (~> 1.0.2)
167 nokogiri (>= 1.5.9)
162 nokogiri (>= 1.5.9)
168 mail (2.7.1)
163 mail (2.7.1)
@@ -199,11 +194,9
199 net-protocol
194 net-protocol
200 timeout
195 timeout
201 nio4r (2.5.8)
196 nio4r (2.5.8)
202 - nokogiri (1.13.8-x86_64-darwin)
203 - racc (~> 1.4)
204 nokogiri (1.13.8-x86_64-linux)
197 nokogiri (1.13.8-x86_64-linux)
205 racc (~> 1.4)
198 racc (~> 1.4)
206 - popper_js (2.11.5)
199 + popper_js (2.11.6)
207 public_suffix (5.0.0)
200 public_suffix (5.0.0)
208 puma (5.6.5)
201 puma (5.6.5)
209 nio4r (~> 2.0)
202 nio4r (~> 2.0)
@@ -243,8 +236,6
243 ffi (~> 1.0)
236 ffi (~> 1.0)
244 rdiscount (2.2.0.2)
237 rdiscount (2.2.0.2)
245 regexp_parser (2.5.0)
238 regexp_parser (2.5.0)
246 - reline (0.3.1)
247 - io-console (~> 0.5)
248 rexml (3.2.5)
239 rexml (3.2.5)
249 rouge (4.0.0)
240 rouge (4.0.0)
250 ruby-progressbar (1.11.0)
241 ruby-progressbar (1.11.0)
@@ -279,7 +270,6
279 actionpack (>= 5.2)
270 actionpack (>= 5.2)
280 activesupport (>= 5.2)
271 activesupport (>= 5.2)
281 sprockets (>= 3.0.0)
272 sprockets (>= 3.0.0)
282 - sqlite3 (1.5.0-x86_64-darwin)
283 sqlite3 (1.5.0-x86_64-linux)
273 sqlite3 (1.5.0-x86_64-linux)
284 strscan (3.0.4)
274 strscan (3.0.4)
285 temple (0.8.2)
275 temple (0.8.2)
@@ -293,7 +283,7
293 activemodel (>= 6.0.0)
283 activemodel (>= 6.0.0)
294 bindex (>= 0.4.0)
284 bindex (>= 0.4.0)
295 railties (>= 6.0.0)
285 railties (>= 6.0.0)
296 - webdrivers (5.0.0)
286 + webdrivers (5.1.0)
297 nokogiri (~> 1.6)
287 nokogiri (~> 1.6)
298 rubyzip (>= 1.3.0)
288 rubyzip (>= 1.3.0)
299 selenium-webdriver (~> 4.0)
289 selenium-webdriver (~> 4.0)
@@ -306,7 +296,6
306 zeitwerk (2.6.0)
296 zeitwerk (2.6.0)
307
297
308 PLATFORMS
298 PLATFORMS
309 - x86_64-darwin-20
310 x86_64-linux
299 x86_64-linux
311
300
312 DEPENDENCIES
301 DEPENDENCIES
@@ -315,9 +304,9
315 best_in_place!
304 best_in_place!
316 bootsnap
305 bootsnap
317 bootstrap (~> 5.2)
306 bootstrap (~> 5.2)
307 + byebug
318 capybara
308 capybara
319 coffee-rails
309 coffee-rails
320 - debug
321 dynamic_form
310 dynamic_form
322 fuzzy-string-match
311 fuzzy-string-match
323 haml
312 haml
@@ -1,5 +1,6
1 //main entry point for sprocket
1 //main entry point for sprocket
2 - //= require jquery
2 + //= require jquery3
3 + //= require jquery_ujs
3 //= require moment
4 //= require moment
4 //= require moment/th
5 //= require moment/th
5 //= require ace-rails-ap
6 //= require ace-rails-ap
@@ -26,6 +26,7
26
26
27 //bootstrap
27 //bootstrap
28 //@import "bootstrap-sprockets";
28 //@import "bootstrap-sprockets";
29 + @import "my_bootstrap_var";
29 @import "bootstrap";
30 @import "bootstrap";
30 @import "select2/select2.min";
31 @import "select2/select2.min";
31 @import "select2/select2-bootstrap-5-theme.min";
32 @import "select2/select2-bootstrap-5-theme.min";
@@ -43,6 +44,7
43 @import 'material_icons';
44 @import 'material_icons';
44
45
45 //bootstrap navbar color (from)
46 //bootstrap navbar color (from)
47 + /*
46 $bgDefault: #19197b;
48 $bgDefault: #19197b;
47 $bgHighlight: #06064b;
49 $bgHighlight: #06064b;
48 $colDefault: #8e8eb4;
50 $colDefault: #8e8eb4;
@@ -57,6 +59,9
57 font-path('bootstrap/glyphicons-halflings-regular.ttf') format('truetype'),
59 font-path('bootstrap/glyphicons-halflings-regular.ttf') format('truetype'),
58 font-path('bootstrap/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg');
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 .navbar-default {
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 //import "controllers"
3 //import "controllers"
4 //
4 //
5
5
6 - //import "my_sprocket"
7 - import "pdfmake"
8 - import "pdfmake-vfs"
9 - import "jszip"
10
6
11 //bootstrap
7 //bootstrap
12 import "bootstrap"
8 import "bootstrap"
13 window.bootstrap = bootstrap
9 window.bootstrap = bootstrap
14 - console.log($); // ok
15 - console.log(bootstrap)
16 - console.log(JSZip);
17
10
18 //datatable
11 //datatable
19 //import 'datatables-bundle'
12 //import 'datatables-bundle'
13 + import "pdfmake"
14 + import "pdfmake-vfs"
15 + import "jszip"
20 import "datatables"
16 import "datatables"
21 import "datatables-bs5"
17 import "datatables-bs5"
22 import "datatables-editor"
18 import "datatables-editor"
@@ -49,10 +45,6
49
45
50 import "select2"
46 import "select2"
51
47
52 - //import "ace-rails-ap"
53 - //import "ace/theme-merbivore"
54 - //import "ace/mode-python"
55 -
56 //my own customization
48 //my own customization
57 import 'custom'
49 import 'custom'
58
50
@@ -8,7 +8,12
8
8
9 $(function() {
9 $(function() {
10 var e;
10 var e;
11 - $(".select2").select2({});
11 + $(".select2").select2({
12 + theme: "bootstrap-5",
13 + //selectionCssClass: "select2--small",
14 + //dropdownCssClass: "select2--small",
15 + });
16 +
12 $('.btn-file :file').on('fileselect', function(event, numFiles, label) {
17 $('.btn-file :file').on('fileselect', function(event, numFiles, label) {
13 var input, log;
18 var input, log;
14 input = $(this).parents('.input-group').find(':text');
19 input = $(this).parents('.input-group').find(':text');
@@ -1,3 +1,3
1 class ApplicationRecord < ActiveRecord::Base
1 class ApplicationRecord < ActiveRecord::Base
2 - self.abstract_class = true
2 + primary_abstract_class
3 end
3 end
@@ -1,4 +1,4
1 - class Submission < ActiveRecord::Base
1 + class Submission < ApplicationRecord
2
2
3 enum tag: {default: 0, model: 1}, _prefix: true
3 enum tag: {default: 0, model: 1}, _prefix: true
4
4
@@ -143,14 +143,14
143 return if self.problem!=nil and self.problem.output_only
143 return if self.problem!=nil and self.problem.output_only
144
144
145 if self.language == nil
145 if self.language == nil
146 - errors.add('source',"Cannot detect language. Did you submit a correct source file?")
146 + errors.add(:source,:invalid,message: "Cannot detect language. Did you submit a correct source file?")
147 end
147 end
148 end
148 end
149
149
150 def must_have_valid_problem
150 def must_have_valid_problem
151 return if self.source==nil
151 return if self.source==nil
152 if self.problem==nil
152 if self.problem==nil
153 - errors.add('problem',"must be specified.")
153 + errors.add(:problem,:blank,'aaa')
154 else
154 else
155 #admin always have right
155 #admin always have right
156 return if self.user.admin?
156 return if self.user.admin?
@@ -12,14 +12,7
12 = " (#{submission.language.pretty_name}) "
12 = " (#{submission.language.pretty_name}) "
13 = link_to '[load]', download_submission_path(submission)
13 = link_to '[load]', download_submission_path(submission)
14 %td
14 %td
15 - - if submission.graded_at
15 + = render 'submission_short', submission: submission, show_button: false, problem_id: submission&.problem&.id
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 - = "]"
23 %td
16 %td
24 = render :partial => 'compiler_message', :locals => {:compiler_message => submission.compiler_message }
17 = render :partial => 'compiler_message', :locals => {:compiler_message => submission.compiler_message }
25 %td
18 %td
@@ -1,32 +1,33
1 - if submission.nil?
1 - if submission.nil?
2 = "-"
2 = "-"
3 - else
3 - else
4 - %strong= "Submission ID:"
4 + - if local_assigns[:show_id]
5 - = submission.id
5 + .row
6 - %br
6 + .col-3.text-secondary
7 + Sub ID:
8 + %strong.col-9= submission.id
7 - unless submission.graded_at
9 - unless submission.graded_at
8 - %strong= t 'main.submitted_at:'
10 + .row
9 - = format_full_time_ago(submission.submitted_at.localtime)
11 + .col-3.text-secondary= t 'main.submitted_at'
12 + %strong.col-9= format_full_time_ago(submission.submitted_at.localtime)
10 - else
13 - else
11 - %strong= t 'main.graded_at:'
14 + .row
12 - = format_full_time_ago(submission.graded_at.localtime)
15 + .col-3.text-secondary= t 'main.graded_at'
13 - %br
16 + %strong.col-9= format_full_time_ago(submission.graded_at.localtime)
14 - if GraderConfiguration['ui.show_score']
17 - if GraderConfiguration['ui.show_score']
15 - %strong=t 'main.score'
18 + .row
16 - = "#{(submission.points*100/submission.problem.full_score).to_i} "
19 + .col-3.text-secondary=t 'main.score'
17 - = " ["
20 + %strong.col-9
18 - %tt
21 + = (submission.points*100/submission.problem.full_score).to_i
19 - = submission.grader_comment
22 + %tt.grader-comment
20 - = "]"
23 + = " [#{submission.grader_comment}]"
21 - %br
24 + - if local_assigns[:show_button]
22 - %strong View:
25 + - if submission.graded_at
23 - if GraderConfiguration.show_grading_result
26 - if GraderConfiguration.show_grading_result
24 = link_to '[detailed result]', :action => 'result', :id => submission.id
27 = link_to '[detailed result]', :action => 'result', :id => submission.id
25 - - if submission.graded_at
28 + = link_to "#{t 'main.cmp_msg'}", compiler_msg_submission_path(submission), {popup: true,remote: true,class: 'btn btn-sm btn-info'}
26 - = link_to "#{t 'main.cmp_msg'}", compiler_msg_submission_path(submission), {popup: true,remote: true,class: 'btn btn-xs btn-info'}
29 + = link_to "#{t 'main.src_link'}",download_submission_path(submission), class: 'btn btn-sm btn-info'
27 - -#
30 + = link_to "#{t 'main.submissions_link'}", problem_submissions_path(submission.problem.id), class: 'btn btn-sm btn-info'
28 - %button.btn.btn-info.btn-xs{type: 'button', data: {toggle: 'modal', target: '#compiler'}}
31 + - if GraderConfiguration.show_testcase
29 - =t 'main.cmp_msg'
32 + = link_to "testcases", show_problem_testcases_path(submission.problem.id), class: 'btn btn-sm btn-info'
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'
32
33
@@ -14,7 +14,9
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"}
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 -# %script{src:"https://cdn.jsdelivr.net/npm/bootstrap@5.2.1/dist/js/bootstrap.bundle.min.js",integrity:"sha384-7VPbUDkoPSGFnVtYi0QogXtr74QeVeeIs99Qfg5YCF+TidwNdjvaKZX19NZ/e6oz",crossorigin:"anonymous"}
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 %body
21 %body
20 - unless local_assigns[:skip_header]
22 - unless local_assigns[:skip_header]
@@ -1,8 +1,9
1 - .card-body
1 + %li.list-group-item
2 .card-title
2 .card-title
3 + %h1
3 = announcement.title
4 = announcement.title
4 - if @current_user and @current_user.admin?
5 - if @current_user and @current_user.admin?
5 - = link_to 'Edit', edit_announcement_path(announcement), class: 'btn btn-xs btn-default'
6 + = link_to 'Edit', edit_announcement_path(announcement), class: 'btn btn-sm btn-outline-secondary'
6 .card-subtitle
7 .card-subtitle
7 = "(updated #{time_ago_in_words(announcement.updated_at)} ago on #{announcement.updated_at})"
8 = "(updated #{time_ago_in_words(announcement.updated_at)} ago on #{announcement.updated_at})"
8 .card-text
9 .card-text
@@ -13,8 +13,8
13 = @prob_submissions[problem.id][:count]
13 = @prob_submissions[problem.id][:count]
14 -#= link_to "[subs]", main_submission_path(problem.id)
14 -#= link_to "[subs]", main_submission_path(problem.id)
15 %td
15 %td
16 - = render :partial => 'submission_short',
16 + = render partial: 'submission_short',
17 - :locals => {:submission => @prob_submissions[problem.id][:submission], :problem_name => problem.name, :problem_id => problem.id }
17 + locals: {:submission => @prob_submissions[problem.id][:submission], :problem_name => problem.name, :problem_id => problem.id, show_button: true }
18 %td
18 %td
19 - if @prob_submissions[problem.id][:submission]
19 - if @prob_submissions[problem.id][:submission]
20 = link_to 'Edit', edit_submission_path(@prob_submissions[problem.id][:submission]), class: 'btn btn-success'
20 = link_to 'Edit', edit_submission_path(@prob_submissions[problem.id][:submission]), class: 'btn btn-success'
@@ -47,12 +47,12
47 .card
47 .card
48 .card-header
48 .card-header
49 Announcement
49 Announcement
50 - = link_to 'Manage', announcements_path, class: 'btn btn-small'
50 + = link_to 'Manage', announcements_path, class: 'btn btn-secondary btn-sm'
51 - .card-body
51 + %ul.list-group.list-group-flush
52 = render :partial => 'announcement', :collection => @announcements
52 = render :partial => 'announcement', :collection => @announcements
53 -
53 + -#
54 %script{:type => 'text/javascript'}
54 %script{:type => 'text/javascript'}
55 - = "Announcement.refreshUrl = '#{url_for :controller => 'main', :action => 'announcements'}';"
55 + = "Announcement.refreshUrl = '#{url_for :controller => 'main', :action => 'announcements'}';".html_safe
56 Announcement.registerRefreshEventTimer();
56 Announcement.registerRefreshEventTimer();
57
57
58 .modal.fade#compiler{tabindex: -1,role: 'dialog'}
58 .modal.fade#compiler{tabindex: -1,role: 'dialog'}
@@ -1,4 +1,4
1 :plain
1 :plain
2 $("#compiler_msg").html("#{j @submission.compiler_message}");
2 $("#compiler_msg").html("#{j @submission.compiler_message}");
3 - $("#compiler").modal();
3 + $("#compiler").modal('show');
4
4
@@ -13,40 +13,43
13 %div#editor{style: 'height: 500px; border-radius: 7px; font-size: 14px;'}
13 %div#editor{style: 'height: 500px; border-radius: 7px; font-size: 14px;'}
14 .col-md-4
14 .col-md-4
15 - # submission form
15 -# submission form
16 - = form_tag({controller: :main, :action => 'submit'}, :multipart => true, class: 'form') do
16 + .card.mb-3
17 -
17 + .card-header
18 + Submission
19 + .card-body
20 + = form_with url: submit_main_path, :multipart => true, class: 'form' do |form|
18 = hidden_field_tag 'editor_text', @source
21 = hidden_field_tag 'editor_text', @source
19 = hidden_field_tag 'submission[problem_id]', @problem.id
22 = hidden_field_tag 'submission[problem_id]', @problem.id
20 - .form-group
23 + .row.mb-2
21 - = label_tag "Task:"
24 + .col-md-4
22 - = text_field_tag 'asdf', "#{@problem.long_name}", class: 'form-control', disabled: true
25 + = form.label "Task", class: 'col-form-label text-secondary'
23 - .form-group
26 + .col-md-8
24 - = label_tag "Description:"
27 + = form.label nil, "#{@problem.long_name}", class: 'col-form-label fw-bold'
25 - = link_to_description_if_any "[download] <span class='glyphicon glyphicon-file'></span>".html_safe, @problem
28 + .row.mb-2
26 -
29 + .col-md-4
27 - .form-group
30 + = form.label "Description", class: 'col-form-label text-secondary'
28 - = label_tag 'Language:'
31 + .col-md-8
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"
32 + = link_to_description_if_any "[download] <span class='mi'>description</span>".html_safe, @problem
30 - .form-group
33 + .row.mb-2
31 - .input-group
34 + .col-md-4
32 - %span.input-group-btn
35 + = form.label :language_id, 'Language', class: 'col-form-label text-secondary'
33 - %span.btn.btn-default.btn-file
36 + .col-md-8
34 - Browse
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'
35 - = file_field_tag 'load_file'
38 + .row.mb-2
36 - = text_field_tag '' , nil, {readonly: true, class: 'form-control'}
39 + .col-12
37 - .form-group
40 + = form.file_field :load_file, class: 'form-control', id: 'load_file'
41 + .row.mb-2
42 + .col-12
38 = submit_tag 'Submit', class: 'btn ' + (@submission && @submission.number >= 100 ? 'golden-btn' : 'btn-success'), id: 'live_submit',
43 = 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}?"}
44 data: {confirm: "Submitting this source code for task #{@problem.long_name}?"}
45 +
40 - # latest submission status
46 -# latest submission status
41 - .panel{class: (@submission && @submission.graded_at) ? "panel-info" : "panel-warning"}
47 + .card
42 - .panel-heading
48 + .card-header.text-bg-info.border-info
43 Latest Submission Status
49 Latest Submission Status
44 - = link_to "Refresh",get_latest_submission_status_submissions_path(@submission.user,@problem), class: "btn btn-default btn-sm", remote: true if @submission
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
45 - .panel-body
51 + .card-body
46 - %div#latest_status
52 + #latest_status
47 - - if @submission
48 - = render :partial => 'submission_short',
49 - :locals => {submission: @submission, problem_name: @problem.name, problem_id: @problem.id }
50
53
51 .modal.fade#compiler{tabindex: -1,role: 'dialog'}
54 .modal.fade#compiler{tabindex: -1,role: 'dialog'}
52 .modal-dialog.modal-lg{role:'document'}
55 .modal-dialog.modal-lg{role:'document'}
@@ -64,7 +67,7
64
67
65 :javascript
68 :javascript
66 $(document).ready(function() {
69 $(document).ready(function() {
67 - e = ace.edit("editor")
70 + var e = ace.edit("editor")
68 e.setValue($("#text_sourcecode").val());
71 e.setValue($("#text_sourcecode").val());
69 e.gotoLine(1);
72 e.gotoLine(1);
70 $("#language_id").trigger('change');
73 $("#language_id").trigger('change');
@@ -80,7 +83,36
80 reader.readAsText(file)
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 //brython();
113 //brython();
114 + $('#refresh').click()
115 +
84 });
116 });
85
117
86
118
@@ -1,2 +1,2
1 :plain
1 :plain
2 - $("#latest_status").html("#{j render({partial: 'submission_short', locals: {submission: @submission, problem_name: @problem.name, problem_id: @problem.id}})}")
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
1 + .card.border-info.mb-2
2 - .panel-heading
2 + .card-header.text-bg-info.border-info
3 Select Problems
3 Select Problems
4 - .panel-body
4 + .card-body
5 - .form-inline
5 + .row
6 + .col-6
6 = select 'submission',
7 = select 'submission',
7 'problem_id',
8 'problem_id',
8 @problems.collect {|p| ["[#{p.name}] #{p.full_name}", problem_submissions_url(p.id)]},
9 @problems.collect {|p| ["[#{p.name}] #{p.full_name}", problem_submissions_url(p.id)]},
9 { selected: (@problem ? problem_submissions_url(@problem) : -1) },
10 { selected: (@problem ? problem_submissions_url(@problem) : -1) },
10 { class: 'select2 form-control'}
11 { class: 'select2 form-control'}
11 - %button.btn.btn-primary.btn-sm.go-button#problem_go{data: {source: '#submission_problem_id'}} Go
12 + .col-6
13 + %a.btn.btn-primary.go-button#problem_go{data: {source: '#submission_problem_id'}} Go
12
14
13 - if @problem!=nil
15 - if @problem!=nil
14 %h2= "Task: #{@problem.full_name} (#{@problem.name})"
16 %h2= "Task: #{@problem.full_name} (#{@problem.name})"
@@ -87,7 +87,7
87 %td.text-right
87 %td.text-right
88 %strong Compiler result
88 %strong Compiler result
89 %td
89 %td
90 - %button.btn.btn-info.btn-xs{type: 'button', data: {toggle: 'modal', target: '#compiler'}}
90 + %button.btn.btn-info.btn-sm{type: 'button', data: {toggle: 'modal', target: '#compiler'}}
91 view
91 view
92 %tr
92 %tr
93 %td.text-right
93 %td.text-right
@@ -95,7 +95,7
95 %td
95 %td
96 = @task.status_str if @task
96 = @task.status_str if @task
97 - if @current_user.admin?
97 - if @current_user.admin?
98 - = link_to "rejudge", rejudge_submission_path, data: {remote: true}, class: 'btn btn-info btn-xs'
98 + = link_to "rejudge", rejudge_submission_path, data: {remote: true}, class: 'btn btn-info btn-sm'
99 - if @current_user.has_role?('ta')
99 - if @current_user.has_role?('ta')
100 %tr
100 %tr
101 %td.text-right
101 %td.text-right
@@ -108,11 +108,11
108 - if @submission.tag_model?
108 - if @submission.tag_model?
109 YES
109 YES
110 - if @current_user.has_role?('ta')
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-xs'
111 + = link_to "remove model status", set_tag_submission_path(@submission, tag: :default), class: 'btn btn-warning btn-sm'
112 - else
112 - else
113 No
113 No
114 - if @current_user.has_role?('ta')
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-xs'
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 .modal.fade#compiler{tabindex: -1,role: 'dialog'}
118 .modal.fade#compiler{tabindex: -1,role: 'dialog'}
@@ -6,7 +6,8
6 pin "my_sprocket"
6 pin "my_sprocket"
7 pin_all_from "app/javascript/controllers", under: "controllers"
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 pin "bootstrap", to: "bootstrap.bundle.min.js", preload: true
11 pin "bootstrap", to: "bootstrap.bundle.min.js", preload: true
11 #no need popper, because bundled already in bootstrap
12 #no need popper, because bundled already in bootstrap
12 #pin "@popperjs/core", to: "https://ga.jspm.io/npm:@popperjs/core@2.11.6/lib/index.js"
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 # Read the Guide for Upgrading Ruby on Rails for more info on each option.
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 # Enable per-form CSRF tokens. Previous versions had false.
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 # Enable origin-checking CSRF mitigation. Previous versions had false.
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 # Make Ruby 2.4 preserve the timezone of the receiver when calling `to_time`.
17 # Make Ruby 2.4 preserve the timezone of the receiver when calling `to_time`.
18 # Previous versions had false.
18 # Previous versions had false.
19 - ActiveSupport.to_time_preserves_timezone = false
19 + #ActiveSupport.to_time_preserves_timezone = false
20
20
21 # Require `belongs_to` associations by default. Previous versions had false.
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 # Do not halt callback chains when a callback returns false. Previous versions had true.
24 # Do not halt callback chains when a callback returns false. Previous versions had true.
25 # ActiveSupport.halt_callback_chains_on_return_false = true
25 # ActiveSupport.halt_callback_chains_on_return_false = true
@@ -42,10 +42,11
42 start_soon: "The contest at your site will start soon. Please wait."
42 start_soon: "The contest at your site will start soon. Please wait."
43 specified_in_header: "Specified in header"
43 specified_in_header: "Specified in header"
44
44
45 - problem_desc: "desc"
45 + problem_desc: desc
46 - submitted_at: "Submitted at"
46 + submission_id: Sub ID
47 - graded_at: "Graded at"
47 + submitted_at: Submitted
48 - score: "score: "
48 + graded_at: Graded
49 + score: score
49 cmp_msg: "compiler msg"
50 cmp_msg: "compiler msg"
50 src_link: "src"
51 src_link: "src"
51 submissions_link: "submissions"
52 submissions_link: "submissions"
deleted file
deleted file
deleted file
deleted file
You need to be logged in to leave comments. Login now