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

r868:826ade30ee35 - - 5 files changed: 45 inserted, 28 deleted

@@ -1,599 +1,600
1 1 /* This is a manifest file that'll be compiled into application.css, which will include all the files
2 2 * listed below.
3 3 *
4 4 * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
5 5 * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
6 6 *
7 7 * You're free to add application-wide styles to this file and they'll appear at the bottom of the
8 8 * compiled file so the styles you add here take precedence over styles defined in any styles
9 9 * defined in the other CSS/SCSS files in this directory. It is generally better to create a new
10 10 * file per style scope.
11 11 *
12 12 * // bootstrap says that we should not do this, but @import each file instead
13 13 * # *= require_tree .
14 14 * # *= require_self
15 15 */
16 16
17 17 //@import "jquery-ui";
18 18 //@import "jquery.ui.core";
19 19 //@import "jquery.ui.theme";
20 20 //@import "jquery.ui.datepicker";
21 21 //@import "jquery.ui.slider";
22 22 //@import "jquery-ui-timepicker-addon";
23 23 //@import "jquery-tablesorter/theme.metro-dark";
24 24 //@import "jquery.countdown";
25 25 //@import "tablesorter-theme.cafe";
26 26
27 27 //bootstrap
28 28 //@import "bootstrap-sprockets";
29 29 @import "bootstrap";
30 30 @import "select2/select2.min";
31 31 @import "select2/select2-bootstrap-5-theme.min";
32 32
33 33 //@import bootstrap3-switch
34 34 //@import "bootstrap-toggle";
35 35 //@import "bootstrap-sortable";
36 36 //@import "bootstrap-datepicker3";
37 37 //@import "bootstrap-datetimepicker";
38 38 //@import "datatables.net-bs/css/dataTables.bootstrap.min";
39 39 //@import "datatables.net-buttons-bs/css/buttons.bootstrap.min";
40 40
41 41 //new import
42 42 @import 'datatables/datatables.min';
43 + @import 'material_icons';
43 44
44 45 //bootstrap navbar color (from)
45 46 $bgDefault: #19197b;
46 47 $bgHighlight: #06064b;
47 48 $colDefault: #8e8eb4;
48 49 $colHighlight: #ffffff;
49 50 $dropDown: false;
50 51
51 52 @font-face {
52 53 font-family: 'Glyphicons Halflings';
53 54 src: font-path('bootstrap/glyphicons-halflings-regular.eot');
54 55 src: font-path('bootstrap/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),
55 56 font-path('bootstrap/glyphicons-halflings-regular.woff') format('woff'),
56 57 font-path('bootstrap/glyphicons-halflings-regular.ttf') format('truetype'),
57 58 font-path('bootstrap/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg');
58 59 }
59 60
60 61 /*
61 62 .navbar-default {
62 63 background-color: $bgDefault;
63 64 border-color: $bgHighlight;
64 65
65 66 .navbar-brand {
66 67 color: $colDefault;
67 68
68 69 &:hover, &:focus {
69 70 color: $colHighlight;
70 71 }
71 72 }
72 73
73 74 .navbar-text {
74 75 color: $colDefault;
75 76 }
76 77
77 78 .navbar-nav {
78 79 > li {
79 80 > a {
80 81 color: $colDefault;
81 82
82 83 &:hover, &:focus {
83 84 color: $colHighlight;
84 85 }
85 86 }
86 87
87 88 @if $dropDown {
88 89 > .dropdown-menu {
89 90 background-color: $bgDefault;
90 91
91 92 > li {
92 93 > a {
93 94 color: $colDefault;
94 95
95 96 &:hover, &:focus {
96 97 color: $colHighlight;
97 98 background-color: $bgHighlight;
98 99 }
99 100 }
100 101
101 102 > .divider {
102 103 background-color: $bgHighlight;
103 104 }
104 105 }
105 106 }
106 107 }
107 108 }
108 109
109 110 @if $dropDown {
110 111 .open .dropdown-menu > .active {
111 112 > a, > a:hover, > a:focus {
112 113 color: $colHighlight;
113 114 background-color: $bgHighlight;
114 115 }
115 116 }
116 117 }
117 118
118 119 > .active {
119 120 > a, > a:hover, > a:focus {
120 121 color: $colHighlight;
121 122 background-color: $bgHighlight;
122 123 }
123 124 }
124 125
125 126 > .open {
126 127 > a, > a:hover, > a:focus {
127 128 color: $colHighlight;
128 129 background-color: $bgHighlight;
129 130 }
130 131 }
131 132 }
132 133
133 134 .navbar-toggle {
134 135 border-color: $bgHighlight;
135 136
136 137 &:hover, &:focus {
137 138 background-color: $bgHighlight;
138 139 }
139 140
140 141 .icon-bar {
141 142 background-color: $colDefault;
142 143 }
143 144 }
144 145
145 146 .navbar-collapse,
146 147 .navbar-form {
147 148 border-color: $colDefault;
148 149 }
149 150
150 151 .navbar-link {
151 152 color: $colDefault;
152 153
153 154 &:hover {
154 155 color: $colHighlight;
155 156 }
156 157 }
157 158 }
158 159
159 160
160 161 @media (max-width: 767px) {
161 162 .navbar-default .navbar-nav .open .dropdown-menu {
162 163 > li > a {
163 164 color: $colDefault;
164 165
165 166 &:hover, &:focus {
166 167 color: $colHighlight;
167 168 }
168 169 }
169 170
170 171 > .active {
171 172 > a, > a:hover, > a:focus {
172 173 color: $colHighlight;
173 174 background-color: $bgHighlight;
174 175 }
175 176 }
176 177 }
177 178 }
178 179
179 180 */
180 181 .secondnavbar {
181 182 top: 50px;
182 183 }
183 184
184 185 // --------------- bootstrap file upload ----------------------
185 186 .btn-file {
186 187 position: relative;
187 188 overflow: hidden;
188 189 }
189 190
190 191 .btn-file input[type=file] {
191 192 position: absolute;
192 193 top: 0;
193 194 right: 0;
194 195 min-width: 100%;
195 196 min-height: 100%;
196 197 font-size: 100px;
197 198 text-align: right;
198 199 filter: alpha(opacity = 0);
199 200 opacity: 0;
200 201 outline: none;
201 202 background: white;
202 203 cursor: inherit;
203 204 display: block;
204 205 }
205 206
206 207 body {
207 208 background: white image-url("topbg.jpg") repeat-x top center;
208 209
209 210 //font-size: 13px
210 211 //font-family: Tahoma, "sans-serif"
211 212 margin: 10px;
212 213 padding: 10px;
213 214 padding-top: 60px;
214 215 }
215 216
216 217 // ------------------ bootstrap sortable --------------------
217 218 table.sortable th {
218 219 padding-right: 20px !important;
219 220
220 221 span.sign {
221 222 right: (-15px) !important;
222 223 }
223 224
224 225 &.text-right {
225 226 padding-left: 20px !important;
226 227 padding-right: 8px !important;
227 228
228 229 &:after, span.sign {
229 230 left: (-15px) !important;
230 231 }
231 232 }
232 233 }
233 234
234 235 input {
235 236 font-family: Tahoma, "sans-serif";
236 237 }
237 238
238 239 h1 {
239 240 font-size: 24px;
240 241 color: #334488;
241 242 line-height: 2em;
242 243 }
243 244
244 245 h2 {
245 246 font-size: 18px;
246 247 color: #5566bb;
247 248 line-height: 1.5em;
248 249 }
249 250
250 251 hr {
251 252 border-top: 1px solid #dddddd;
252 253 border-bottom: 1px solid #eeeeee;
253 254 }
254 255
255 256 //#a
256 257 // color: #6666cc
257 258 // text-decoration: none
258 259 //
259 260 // &:link, &:visited
260 261 // color: #6666cc
261 262 // text-decoration: none
262 263 //
263 264 // &:hover, &:focus
264 265 // color: #111166
265 266 // text-decoration: none
266 267
267 268 div {
268 269 &.userbar {
269 270 line-height: 1.5em;
270 271 text-align: right;
271 272 font-size: 12px;
272 273 }
273 274
274 275 &.title {
275 276 padding: 10px 0px;
276 277 line-height: 1.5em;
277 278 font-size: 13px;
278 279
279 280 span.contest-over-msg {
280 281 font-size: 15px;
281 282 color: red;
282 283 }
283 284
284 285 table {
285 286 width: 100%;
286 287 font-weight: bold;
287 288 }
288 289
289 290 td {
290 291 &.left-col {
291 292 text-align: left;
292 293 vertical-align: top;
293 294 color: #444444;
294 295 }
295 296
296 297 &.right-col {
297 298 text-align: right;
298 299 vertical-align: top;
299 300 font-size: 18px;
300 301 color: #116699;
301 302 }
302 303 }
303 304 }
304 305 }
305 306
306 307 table.info {
307 308 margin: 10px 0;
308 309 border: 1px solid #666666;
309 310 border-collapse: collapse;
310 311 font-size: 12px;
311 312
312 313 th {
313 314 border: 1px solid #666666;
314 315 line-height: 1.5em;
315 316 padding: 0 0.5em;
316 317 }
317 318
318 319 td {
319 320 border-left: 1px solid #666666;
320 321 border-right: 1px solid #666666;
321 322 line-height: 1.5em;
322 323 padding: 0 0.5em;
323 324 }
324 325 }
325 326
326 327 tr {
327 328 &.info-head {
328 329 background: #777777;
329 330 color: white;
330 331 }
331 332
332 333 &.info-odd {
333 334 background: #eeeeee;
334 335 }
335 336
336 337 &.info-even {
337 338 background: #fcfcfc;
338 339 }
339 340 }
340 341
341 342 @mixin basicbox {
342 343 background: #eeeeff;
343 344 border: 1px dotted #99aaee;
344 345 padding: 5px;
345 346 margin: 10px 0px;
346 347 color: black;
347 348 font-size: 13px;
348 349 }
349 350
350 351 .infobox {
351 352 @include basicbox;
352 353 }
353 354
354 355 .submitbox {
355 356 @include basicbox;
356 357 }
357 358
358 359 .errorExplanation {
359 360 border: 1px dotted gray;
360 361 color: #bb2222;
361 362 padding: 5px 15px 5px 15px;
362 363 margin-bottom: 5px;
363 364 background-color: white;
364 365 font-weight: normal;
365 366
366 367 h2 {
367 368 color: #cc1111;
368 369 font-weight: bold;
369 370 }
370 371 }
371 372
372 373 table.uinfo {
373 374 border-collapse: collapse;
374 375 border: 1px solid black;
375 376 font-size: 13px;
376 377 }
377 378
378 379 td.uinfo {
379 380 vertical-align: top;
380 381 border: 1px solid black;
381 382 padding: 5px;
382 383 }
383 384
384 385 th.uinfo {
385 386 background: lightgreen;
386 387 vertical-align: top;
387 388 text-align: right;
388 389 border: 1px solid black;
389 390 padding: 5px;
390 391 }
391 392
392 393 div {
393 394 &.compilermsgbody {
394 395 font-family: monospace;
395 396 }
396 397
397 398 &.task-menu {
398 399 text-align: center;
399 400 font-size: 13px;
400 401 line-height: 1.75em;
401 402 font-weight: bold;
402 403 border-top: 1px dashed gray;
403 404 border-bottom: 1px dashed gray;
404 405 margin-top: 2px;
405 406 margin-bottom: 4px;
406 407 }
407 408 }
408 409
409 410 table.taskdesc {
410 411 border: 2px solid #dddddd;
411 412 border-collapse: collapse;
412 413 margin: 10px auto;
413 414 width: 90%;
414 415 font-size: 13px;
415 416
416 417 p {
417 418 font-size: 13px;
418 419 }
419 420
420 421 tr.name {
421 422 border: 2px solid #dddddd;
422 423 background: #dddddd;
423 424 color: #333333;
424 425 font-weight: bold;
425 426 font-size: 14px;
426 427 line-height: 1.5em;
427 428 text-align: center;
428 429 }
429 430
430 431 td {
431 432 &.desc-odd {
432 433 padding: 5px;
433 434 padding-left: 20px;
434 435 background: #fefeee;
435 436 }
436 437
437 438 &.desc-even {
438 439 padding: 5px;
439 440 padding-left: 20px;
440 441 background: #feeefe;
441 442 }
442 443 }
443 444 }
444 445
445 446 .announcementbox {
446 447 margin: 10px 0px;
447 448 background: #bbddee;
448 449 padding: 1px;
449 450
450 451 span.title {
451 452 font-weight: bold;
452 453 color: #224455;
453 454 padding-left: 10px;
454 455 line-height: 1.6em;
455 456 }
456 457 }
457 458
458 459 .announcement {
459 460 margin: 2px;
460 461 background: white;
461 462 padding: 1px;
462 463 padding-left: 10px;
463 464 padding-right: 10px;
464 465 padding-top: 5px;
465 466 padding-bottom: 5px;
466 467 }
467 468
468 469 .announcement p {
469 470 font-size: 12px;
470 471 margin: 2px;
471 472 }
472 473
473 474 .pub-info {
474 475 text-align: right;
475 476 font-style: italic;
476 477 font-size: 9px;
477 478
478 479 p {
479 480 text-align: right;
480 481 font-style: italic;
481 482 font-size: 9px;
482 483 }
483 484 }
484 485
485 486 .announcement {
486 487 .toggles {
487 488 font-weight: normal;
488 489 float: right;
489 490 font-size: 80%;
490 491 }
491 492
492 493 .announcement-title {
493 494 font-weight: bold;
494 495 }
495 496 }
496 497
497 498 div {
498 499 &.message {
499 500 margin: 10px 0 0;
500 501
501 502 div {
502 503 &.message {
503 504 margin: 0 0 0 30px;
504 505 }
505 506
506 507 &.body {
507 508 border: 2px solid #dddddd;
508 509 background: #fff8f8;
509 510 padding-left: 5px;
510 511 }
511 512
512 513 &.reply-body {
513 514 border: 2px solid #bbbbbb;
514 515 background: #fffff8;
515 516 padding-left: 5px;
516 517 }
517 518
518 519 &.stat {
519 520 font-size: 10px;
520 521 line-height: 1.75em;
521 522 padding: 0 5px;
522 523 color: #333333;
523 524 background: #dddddd;
524 525 font-weight: bold;
525 526 }
526 527
527 528 &.message div.stat {
528 529 font-size: 10px;
529 530 line-height: 1.75em;
530 531 padding: 0 5px;
531 532 color: #444444;
532 533 background: #bbbbbb;
533 534 font-weight: bold;
534 535 }
535 536 }
536 537 }
537 538
538 539 &.contest-title {
539 540 color: white;
540 541 text-align: center;
541 542 line-height: 2em;
542 543 }
543 544
544 545 &.registration-desc, &.test-desc {
545 546 border: 1px dotted gray;
546 547 background: #f5f5f5;
547 548 padding: 5px;
548 549 margin: 10px 0;
549 550 font-size: 12px;
550 551 line-height: 1.5em;
551 552 }
552 553 }
553 554
554 555 h2.contest-title {
555 556 margin-top: 5px;
556 557 margin-bottom: 5px;
557 558 }
558 559
559 560
560 561
561 562 .grader-comment {
562 563 word-wrap: break-word;
563 564 }
564 565
565 566
566 567 golden-btn + .golden-btn { margin-top: 1em; }
567 568
568 569 .golden-btn {
569 570 display: inline-block;
570 571 outline: none;
571 572 font-family: inherit;
572 573 box-sizing: border-box;
573 574 border: none;
574 575 box-shadow: 0 3px 6px rgba(0,0,0,.16), 0 3px 6px rgba(110,80,20,.4),
575 576 inset 0 -2px 5px 1px rgba(139,66,8,1),
576 577 inset 0 -1px 1px 3px rgba(250,227,133,1);
577 578 background-image: linear-gradient(160deg, #a54e07, #b47e11, #fef1a2, #bc881b, #a54e07) !important;
578 579 border: 1px solid #a55d07;
579 580 color: rgb(120,50,5);
580 581 text-shadow: 0 2px 2px rgba(250, 227, 133, 1);
581 582 cursor: pointer;
582 583 transition: all .2s ease-in-out;
583 584 background-size: 100% 100%;
584 585 background-position:center;
585 586 }
586 587 .golden-btn:focus,
587 588 .golden-btn:hover {
588 589 background-size: 150% 150%;
589 590 box-shadow: 0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23),
590 591 inset 0 -2px 5px 1px #b17d10,
591 592 inset 0 -1px 1px 3px rgba(250,227,133,1);
592 593 border: 1px solid rgba(165,93,7,.6);
593 594 color: rgba(120,50,5,.8);
594 595 }
595 596 .golden-btn:active {
596 597 box-shadow: 0 3px 6px rgba(0,0,0,.16), 0 3px 6px rgba(110,80,20,.4),
597 598 inset 0 -2px 5px 1px #b17d10,
598 599 inset 0 -1px 1px 3px rgba(250,227,133,1);
599 600 }
@@ -1,116 +1,116
1 1 class AnnouncementsController < ApplicationController
2 2
3 3 before_action :admin_authorization
4 4
5 5 in_place_edit_for :announcement, :published
6 6
7 7 # GET /announcements
8 8 # GET /announcements.xml
9 9 def index
10 10 @announcements = Announcement.order(created_at: :desc)
11 11
12 12 respond_to do |format|
13 13 format.html # index.html.erb
14 14 format.xml { render :xml => @announcements }
15 15 end
16 16 end
17 17
18 18 # GET /announcements/1
19 19 # GET /announcements/1.xml
20 20 def show
21 21 @announcement = Announcement.find(params[:id])
22 22
23 23 respond_to do |format|
24 24 format.html # show.html.erb
25 25 format.xml { render :xml => @announcement }
26 26 end
27 27 end
28 28
29 29 # GET /announcements/new
30 30 # GET /announcements/new.xml
31 31 def new
32 32 @announcement = Announcement.new
33 33
34 34 respond_to do |format|
35 35 format.html # new.html.erb
36 36 format.xml { render :xml => @announcement }
37 37 end
38 38 end
39 39
40 40 # GET /announcements/1/edit
41 41 def edit
42 42 @announcement = Announcement.find(params[:id])
43 43 end
44 44
45 45 # POST /announcements
46 46 # POST /announcements.xml
47 47 def create
48 48 @announcement = Announcement.new(announcement_params)
49 49
50 50 respond_to do |format|
51 51 if @announcement.save
52 52 flash[:notice] = 'Announcement was successfully created.'
53 53 format.html { redirect_to(@announcement) }
54 54 format.xml { render :xml => @announcement, :status => :created, :location => @announcement }
55 55 else
56 56 format.html { render :action => "new" }
57 57 format.xml { render :xml => @announcement.errors, :status => :unprocessable_entity }
58 58 end
59 59 end
60 60 end
61 61
62 62 # PUT /announcements/1
63 63 # PUT /announcements/1.xml
64 64 def update
65 65 @announcement = Announcement.find(params[:id])
66 66
67 67 respond_to do |format|
68 - if @announcement.update_attributes(announcement_params)
68 + if @announcement.update(announcement_params)
69 69 flash[:notice] = 'Announcement was successfully updated.'
70 70 format.html { redirect_to(@announcement) }
71 71 format.js {}
72 72 format.xml { head :ok }
73 73 else
74 74 format.html { render :action => "edit" }
75 75 format.js {}
76 76 format.xml { render :xml => @announcement.errors, :status => :unprocessable_entity }
77 77 end
78 78 end
79 79 end
80 80
81 81 def toggle
82 82 @announcement = Announcement.find(params[:id])
83 - @announcement.update_attributes( published: !@announcement.published? )
83 + @announcement.update( published: !@announcement.published? )
84 84 respond_to do |format|
85 85 format.js { render partial: 'toggle_button',
86 86 locals: {button_id: "#announcement_toggle_#{@announcement.id}",button_on: @announcement.published? } }
87 87 end
88 88 end
89 89
90 90 def toggle_front
91 91 @announcement = Announcement.find(params[:id])
92 92 @announcement.update_attributes( frontpage: !@announcement.frontpage? )
93 93 respond_to do |format|
94 94 format.js { render partial: 'toggle_button',
95 95 locals: {button_id: "#announcement_toggle_front_#{@announcement.id}",button_on: @announcement.frontpage? } }
96 96 end
97 97 end
98 98
99 99 # DELETE /announcements/1
100 100 # DELETE /announcements/1.xml
101 101 def destroy
102 102 @announcement = Announcement.find(params[:id])
103 103 @announcement.destroy
104 104
105 105 respond_to do |format|
106 106 format.html { redirect_to(announcements_url) }
107 107 format.xml { head :ok }
108 108 end
109 109 end
110 110
111 111 private
112 112
113 113 def announcement_params
114 114 params.require(:announcement).permit(:author, :body, :published, :frontpage, :contest_only, :title, :on_nav_bar)
115 115 end
116 116 end
@@ -1,82 +1,87
1 1 %header
2 2 %nav.navbar.fixed-top.navbar-dark.bg-primary.navbar-expand-lg
3 3 .container-fluid
4 4 %a.navbar-brand{href: list_main_path}
5 5 %span.glyphicon.glyphicon-home
6 6 MAIN
7 7 %button.navbar-toggler.collapsed{ type: :button, 'data-bs': {toggle: 'collapse', target: '#navbar-collapse'} }
8 8 %span.navbar-toggler-icon
9 9 .collapse.navbar-collapse#navbar-collapse
10 10 %ul.navbar-nav.me-auto.mb-2.mb-lg-0
11 11 / submission
12 12 - if (@current_user!=nil) and (GraderConfiguration.show_tasks_to?(@current_user))
13 13 %li.nav-item.dropdown
14 14 %a.nav-link.dropdown-toggle{href: '#', 'data-bs': {toggle:'dropdown'}, aria: {expanded:"false"}, role: "button"}
15 15 = "#{I18n.t 'menu.submissions'}"
16 16 %ul.dropdown-menu
17 17 %li= link_to 'View', submissions_path, class:'dropdown-item'
18 18 %li= link_to 'Self Test', test_index_path, class:'dropdown-item'
19 19 / hall of fame
20 20 - if GraderConfiguration['right.user_hall_of_fame']
21 21 = add_menu("#{I18n.t 'menu.hall_of_fame'}", 'report', 'problem_hof', class: 'nav-item')
22 22 / display MODE button (with countdown in contest mode)
23 23 - if GraderConfiguration.analysis_mode?
24 24 %div.navbar-btn.btn.btn-success#countdown= "ANALYSIS MODE"
25 25 - elsif GraderConfiguration.time_limit_mode?
26 26 - if @current_user.contest_finished?
27 27 %div.navbar-btn.btn.btn-danger#countdown= "Contest is over"
28 28 - elsif !@current_user.contest_started?
29 29 %div.navbar-btn.btn.btn-primary#countdown= (t 'title_bar.contest_not_started')
30 30 - else
31 31 %div.navbar-btn.btn.btn-primary#countdown asdf
32 32 :javascript
33 33 $("#countdown").countdown({until: "+#{@current_user.contest_time_left.to_i}s", layout: 'Time left: {hnn}:{mnn}:{snn}'});
34 34 / admin section
35 35 - if (@current_user!=nil) and (session[:admin])
36 36 / management
37 37 %li.nav-item.dropdown
38 38 %a.nav-link.dropdown-toggle{href: '#', 'data-bs': {toggle:'dropdown'}, aria: {haspopup:"true", expanded:"false"}, role: "button"}
39 39 Manage
40 40 %ul.dropdown-menu
41 41 %li= link_to 'Announcements', announcements_path, class: 'dropdown-item'
42 42 %li= link_to 'Problems', problems_path, class: 'dropdown-item'
43 43 %li= link_to 'Tags', tags_path, class: 'dropdown-item'
44 44 %li= link_to 'Users', user_admin_index_path, class: 'dropdown-item'
45 45 %li= link_to 'User Groups', groups_path, class: 'dropdown-item'
46 46 %li= link_to 'Graders', graders_list_path, class: 'dropdown-item'
47 47 %li= link_to 'Message ', console_messages_path, class: 'dropdown-item'
48 48 %li
49 49 %hr.dropdown-divider
50 50 %li= link_to 'System config', grader_configuration_index_path, class: 'dropdown-item'
51 51 %li
52 52 %hr.dropdown-divider
53 53 %li= link_to 'Sites', sites_path, class: 'dropdown-item'
54 54 %li= link_to 'Contests', contest_management_index_path, class: 'dropdown-item'
55 55 -#
56 56 / report
57 57 %li.nav-item.dropdown
58 58 %a.nav-link.dropdown-toggle{href: '#', 'data-bs': {toggle:'dropdown'}, aria: {haspopup:"true", expanded:"false"}, role: "button"}
59 59 Report
60 60 %ul.dropdown-menu
61 61 %li= link_to 'Current Score', current_score_report_path, class: 'dropdown-item'
62 62 %li= link_to 'Score Report', max_score_report_path, class: 'dropdown-item'
63 63 %li= link_to 'Submission Report', submission_report_path, class: 'dropdown-item'
64 64 %li= link_to 'Login Report', login_report_path, class: 'dropdown-item'
65 65 - if (ungraded = Submission.where('graded_at is null').where('submitted_at < ?', 1.minutes.ago).count) > 0
66 66 =link_to "#{ungraded} backlogs!",
67 67 graders_list_path,
68 68 class: 'navbar-btn btn btn-default btn-warning', data: {toggle: 'tooltip'},title: 'Number of ungraded submission'
69 69 / announcement
70 70 - @nav_announcement.each do |ann|
71 71 %p.navbar-text
72 72 = ann.body.html_safe
73 -
74 -
75 -
76 - %ul.nav.navbar-nav.navbar-right
77 - = add_menu("#{content_tag(:span,'',class: 'glyphicon glyphicon-question-sign')}".html_safe, 'main', 'help')
78 - = add_menu("#{content_tag(:span,'',class: 'glyphicon glyphicon-comment')}".html_safe, 'messages', 'index', {title: I18n.t('menu.messages'), data: {toggle: 'tooltip'}})
79 - - if GraderConfiguration['system.user_setting_enabled']
80 - = add_menu("#{content_tag(:span,'',class: 'glyphicon glyphicon-cog', id: 'user_profile')}".html_safe, 'users', 'profile', {title: I18n.t('menu.settings'), data: {toggle: 'tooltip'}})
81 - = add_menu("#{content_tag(:span,'',class: 'glyphicon glyphicon-log-out')} #{@current_user.full_name}".html_safe, 'main', 'login', {title: I18n.t('menu.log_out'), data: {toggle: 'tooltip'}})
82 -
73 + %ul.navbar-nav
74 + %li.nav-item
75 + %a.nav-link{href: help_main_path}
76 + %span.mi.md-18 help
77 + %li.nav-item
78 + %a.nav-link{href: messages_path}
79 + %span.mi.md-18 chat
80 + - if GraderConfiguration['system.user_setting_enabled']
81 + %li.nav-item
82 + %a.nav-link{href: profile_users_path}
83 + %span.mi.md-18 settings
84 + %li.nav-item
85 + %a.nav-link{href: login_main_path}
86 + %span.mi.md-18 exit_to_app
87 + = @current_user.full_name
@@ -1,15 +1,26
1 - %li.list-group-item
2 - %strong
1 + .card-body
2 + .card-title
3 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'
6 - %small= "(updated #{time_ago_in_words(announcement.updated_at)} ago on #{announcement.updated_at})"
4 + - if @current_user and @current_user.admin?
5 + = link_to 'Edit', edit_announcement_path(announcement), class: 'btn btn-xs btn-default'
6 + .card-subtitle
7 + = "(updated #{time_ago_in_words(announcement.updated_at)} ago on #{announcement.updated_at})"
8 + .card-text
9 + = markdown(announcement.body)
10 +
7 11
8 - %br
9 - = markdown(announcement.body)
10 - :javascript
11 - Announcement.updateRecentId(#{announcement.id});
12 - - if (defined? announcement_effect) and announcement_effect
12 + -#
13 + %li.list-group-item
14 + %strong
15 + - if @current_user and @current_user.admin?
16 + = link_to 'Edit', edit_announcement_path(announcement), class: 'btn btn-xs btn-default'
17 + %small= "(updated #{time_ago_in_words(announcement.updated_at)} ago on #{announcement.updated_at})"
18 +
19 + %br
20 + = markdown(announcement.body)
13 21 :javascript
14 - $("announcement-#{announcement.id}").blindDown({duration: 0.2});
15 - $("announcement-#{announcement.id}").appear({duration: 0.5, queue: 'end'});
22 + Announcement.updateRecentId(#{announcement.id});
23 + - if (defined? announcement_effect) and announcement_effect
24 + :javascript
25 + $("announcement-#{announcement.id}").blindDown({duration: 0.2});
26 + $("announcement-#{announcement.id}").appear({duration: 0.5, queue: 'end'});
@@ -1,68 +1,68
1 1 - content_for :head do
2 2 = javascript_include_tag "announcement_refresh"
3 3
4 4 = user_title_bar(@user)
5 5 - if @user.section
6 6 passcode for CP Unofficial Logo voting is
7 7 %strong= @user.section
8 8 %br
9 9
10 10 - if (GraderConfiguration.contest_mode?) and (@user.site!=nil) and (@user.site.started!=true)
11 11 %p=t 'main.start_soon'
12 12
13 13 .row
14 14 .col-md-7
15 15 - if GraderConfiguration.show_submitbox_to?(@user)
16 16 .panel.panel-primary
17 17 .panel-heading
18 18 Submission
19 19 .panel-body
20 20 = render :partial => 'submission_box'
21 21 - if GraderConfiguration.show_tasks_to?(@user)
22 22 - if not GraderConfiguration.multicontests?
23 23 %table.table.table-striped.table-condensed
24 24 %thead
25 25 %tr
26 26 %th Task name
27 27 %th Full name
28 28 %th # of sub(s)
29 29 %th Results
30 30 %th
31 31 %tbody
32 32 = render :partial => 'problem', :collection => @problems
33 33 - else
34 34 - @contest_problems.each do |cp|
35 35 - if cp[:problems].length > 0
36 36 %h2{:class =>'contest-title'}
37 37 = "#{cp[:contest] ? cp[:contest].title : 'Public problems'}"
38 38 %table.info
39 39 %tr.info-head
40 40 %th Task name
41 41 %th Full name
42 42 %th # of sub(s)
43 43 %th Results
44 44 %th
45 45 = render :partial => 'problem', :collection => cp[:problems]
46 46 .col-md-5
47 - .panel.panel-info
48 - .panel-heading
47 + .card
48 + .card-header
49 49 Announcement
50 - = link_to 'Manage', announcements_path, class: 'btn btn-xs btn-default'
51 - %ul.list-group
50 + = link_to 'Manage', announcements_path, class: 'btn btn-small'
51 + .card-body
52 52 = render :partial => 'announcement', :collection => @announcements
53 53
54 54 %script{:type => 'text/javascript'}
55 55 = "Announcement.refreshUrl = '#{url_for :controller => 'main', :action => 'announcements'}';"
56 56 Announcement.registerRefreshEventTimer();
57 57
58 58 .modal.fade#compiler{tabindex: -1,role: 'dialog'}
59 59 .modal-dialog.modal-lg{role:'document'}
60 60 .modal-content
61 61 .modal-header
62 62 %button.close{type: 'button', data: {dismissed: :modal}, aria: {label: 'close'}}
63 63 %span{aria: {hidden: 'true'}, data: {dismiss: 'modal'}} &times;
64 64 %h4 Compiler message
65 65 .modal-body
66 66 %pre#compiler_msg
67 67 .modal-footer
68 68 %button.btn.btn-default{type: 'button', data: {dismiss: 'modal'}} Close
You need to be logged in to leave comments. Login now