Description:
live editor using cloud9 ace for problem
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r564:484b31caab29 - - 16 files changed: 121 inserted, 1 deleted

@@ -0,0 +1,10
1 + # Place all the behaviors and hooks related to the matching controller here.
2 + # All this logic will automatically be available in application.js.
3 + # You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/
4 +
5 +
6 + $ ->
7 + $("#live_submit").on "click", (event) ->
8 + h = $("#editor_text")
9 + e = ace.edit("editor")
10 + h.val(e.getValue())
@@ -0,0 +1,12
1 + // Place all the styles related to the sources controller here.
2 + // They will automatically be included in application.css.
3 + // You can use Sass (SCSS) here: http://sass-lang.com/
4 +
5 + #editor {
6 + position: absolute;
7 + top: 0;
8 + right: 0;
9 + bottom: 0;
10 + left: 0;
11 + }
12 +
@@ -0,0 +1,7
1 + class SourcesController < ApplicationController
2 + before_filter :authenticate, :except => [:index, :login]
3 +
4 + def direct_edit
5 + @problem = Problem.find_by_id(params[:pid])
6 + end
7 + end
@@ -0,0 +1,2
1 + module SourcesHelper
2 + end
@@ -0,0 +1,21
1 + %h1 Live submit
2 + = form_tag({controller: :main, :action => 'submit'}, :multipart => true, class: 'form-inline') do
3 + = hidden_field_tag 'editor_text'
4 + = hidden_field_tag 'submission[problem_id]', @problem.id
5 + .form-group
6 + = label_tag "Task:"
7 + = text_field_tag 'asdf', "#{@problem.long_name}", class: 'form-control', disabled: true
8 +
9 + .form-group
10 + = label_tag 'Language'
11 + = select_tag 'language_id', options_from_collection_for_select(Language.all, 'id', 'pretty_name',"C++"), class: 'form-control', style: "width: 100px"
12 + .form-group
13 + = submit_tag 'Submit', class: 'btn btn-success', id: 'live_submit'
14 +
15 + %br
16 +
17 + .container
18 + .row
19 + .col-md-12
20 + %div#editor{style: 'height: 400px'}
21 + Hahaha
@@ -0,0 +1,12
1 + require 'spec_helper'
2 +
3 + describe SourcesController do
4 +
5 + describe "GET 'direct_edit'" do
6 + it "returns http success" do
7 + get 'direct_edit'
8 + response.should be_success
9 + end
10 + end
11 +
12 + end
@@ -0,0 +1,15
1 + require 'spec_helper'
2 +
3 + # Specs in this file have access to a helper object that includes
4 + # the SourcesHelper. For example:
5 + #
6 + # describe SourcesHelper do
7 + # describe "string concat" do
8 + # it "concats two strings with spaces" do
9 + # expect(helper.concat_strings("this","that")).to eq("this that")
10 + # end
11 + # end
12 + # end
13 + describe SourcesHelper do
14 + pending "add some examples to (or delete) #{__FILE__}"
15 + end
@@ -0,0 +1,5
1 + require 'spec_helper'
2 +
3 + describe "sources/direct_edit.html.haml" do
4 + pending "add some examples to (or delete) #{__FILE__}"
5 + end
@@ -36,37 +36,40
36 # gem 'capistrano'
36 # gem 'capistrano'
37
37
38 # To use debugger
38 # To use debugger
39 # gem 'debugger'
39 # gem 'debugger'
40 #
40 #
41
41
42 #in-place editor
42 #in-place editor
43 gem 'best_in_place', '~> 3.0.1'
43 gem 'best_in_place', '~> 3.0.1'
44
44
45 # jquery addition
45 # jquery addition
46 gem 'jquery-rails'
46 gem 'jquery-rails'
47 gem 'jquery-ui-sass-rails'
47 gem 'jquery-ui-sass-rails'
48 gem 'jquery-timepicker-addon-rails'
48 gem 'jquery-timepicker-addon-rails'
49 gem 'jquery-tablesorter'
49 gem 'jquery-tablesorter'
50
50
51 #syntax highlighter
51 #syntax highlighter
52 gem 'rouge'
52 gem 'rouge'
53
53
54 #add bootstrap
54 #add bootstrap
55 gem 'bootstrap-sass', '~> 3.2.0'
55 gem 'bootstrap-sass', '~> 3.2.0'
56 gem 'bootstrap-switch-rails'
56 gem 'bootstrap-switch-rails'
57 gem 'bootstrap-toggle-rails'
57 gem 'bootstrap-toggle-rails'
58 gem 'autoprefixer-rails'
58 gem 'autoprefixer-rails'
59
59
60 + gem 'ace-rails-ap'
61 +
60
62
61 gem 'haml'
63 gem 'haml'
64 + gem 'haml-rails'
62 gem 'mail'
65 gem 'mail'
63 gem 'rdiscount'
66 gem 'rdiscount'
64 gem 'test-unit'
67 gem 'test-unit'
65 gem 'will_paginate', '~> 3.0.7'
68 gem 'will_paginate', '~> 3.0.7'
66 gem 'dynamic_form'
69 gem 'dynamic_form'
67 gem 'in_place_editing'
70 gem 'in_place_editing'
68 gem 'verification', :git => 'https://github.com/sikachu/verification.git'
71 gem 'verification', :git => 'https://github.com/sikachu/verification.git'
69
72
70 group :test, :development do
73 group :test, :development do
71 gem 'rspec-rails', '~> 2.99.0'
74 gem 'rspec-rails', '~> 2.99.0'
72 end
75 end
@@ -1,35 +1,36
1 GIT
1 GIT
2 remote: https://github.com/sikachu/verification.git
2 remote: https://github.com/sikachu/verification.git
3 revision: 76eaf51b13276ecae54bd9cd115832595d2ff56d
3 revision: 76eaf51b13276ecae54bd9cd115832595d2ff56d
4 specs:
4 specs:
5 verification (1.0.3)
5 verification (1.0.3)
6 actionpack (>= 3.0.0, < 5.0)
6 actionpack (>= 3.0.0, < 5.0)
7 activesupport (>= 3.0.0, < 5.0)
7 activesupport (>= 3.0.0, < 5.0)
8
8
9 GEM
9 GEM
10 remote: https://rubygems.org/
10 remote: https://rubygems.org/
11 specs:
11 specs:
12 + ace-rails-ap (4.0.2)
12 actionmailer (3.2.21)
13 actionmailer (3.2.21)
13 actionpack (= 3.2.21)
14 actionpack (= 3.2.21)
14 mail (~> 2.5.4)
15 mail (~> 2.5.4)
15 actionpack (3.2.21)
16 actionpack (3.2.21)
16 activemodel (= 3.2.21)
17 activemodel (= 3.2.21)
17 activesupport (= 3.2.21)
18 activesupport (= 3.2.21)
18 builder (~> 3.0.0)
19 builder (~> 3.0.0)
19 erubis (~> 2.7.0)
20 erubis (~> 2.7.0)
20 journey (~> 1.0.4)
21 journey (~> 1.0.4)
21 rack (~> 1.4.5)
22 rack (~> 1.4.5)
22 rack-cache (~> 1.2)
23 rack-cache (~> 1.2)
23 rack-test (~> 0.6.1)
24 rack-test (~> 0.6.1)
24 sprockets (~> 2.2.1)
25 sprockets (~> 2.2.1)
25 activemodel (3.2.21)
26 activemodel (3.2.21)
26 activesupport (= 3.2.21)
27 activesupport (= 3.2.21)
27 builder (~> 3.0.0)
28 builder (~> 3.0.0)
28 activerecord (3.2.21)
29 activerecord (3.2.21)
29 activemodel (= 3.2.21)
30 activemodel (= 3.2.21)
30 activesupport (= 3.2.21)
31 activesupport (= 3.2.21)
31 arel (~> 3.0.2)
32 arel (~> 3.0.2)
32 tzinfo (~> 0.3.29)
33 tzinfo (~> 0.3.29)
33 activeresource (3.2.21)
34 activeresource (3.2.21)
34 activemodel (= 3.2.21)
35 activemodel (= 3.2.21)
35 activesupport (= 3.2.21)
36 activesupport (= 3.2.21)
@@ -40,48 +41,53
40 autoprefixer-rails (6.0.3)
41 autoprefixer-rails (6.0.3)
41 execjs
42 execjs
42 json
43 json
43 best_in_place (3.0.3)
44 best_in_place (3.0.3)
44 actionpack (>= 3.2)
45 actionpack (>= 3.2)
45 railties (>= 3.2)
46 railties (>= 3.2)
46 bootstrap-sass (3.2.0.2)
47 bootstrap-sass (3.2.0.2)
47 sass (~> 3.2)
48 sass (~> 3.2)
48 bootstrap-switch-rails (3.3.3)
49 bootstrap-switch-rails (3.3.3)
49 bootstrap-toggle-rails (2.2.1.0)
50 bootstrap-toggle-rails (2.2.1.0)
50 builder (3.0.4)
51 builder (3.0.4)
51 coffee-rails (3.2.2)
52 coffee-rails (3.2.2)
52 coffee-script (>= 2.2.0)
53 coffee-script (>= 2.2.0)
53 railties (~> 3.2.0)
54 railties (~> 3.2.0)
54 coffee-script (2.3.0)
55 coffee-script (2.3.0)
55 coffee-script-source
56 coffee-script-source
56 execjs
57 execjs
57 coffee-script-source (1.9.0)
58 coffee-script-source (1.9.0)
58 diff-lcs (1.2.5)
59 diff-lcs (1.2.5)
59 dynamic_form (1.1.4)
60 dynamic_form (1.1.4)
60 erubis (2.7.0)
61 erubis (2.7.0)
61 execjs (2.3.0)
62 execjs (2.3.0)
62 haml (4.0.6)
63 haml (4.0.6)
63 tilt
64 tilt
65 + haml-rails (0.4)
66 + actionpack (>= 3.1, < 4.1)
67 + activesupport (>= 3.1, < 4.1)
68 + haml (>= 3.1, < 4.1)
69 + railties (>= 3.1, < 4.1)
64 hike (1.2.3)
70 hike (1.2.3)
65 i18n (0.7.0)
71 i18n (0.7.0)
66 in_place_editing (1.2.0)
72 in_place_editing (1.2.0)
67 journey (1.0.4)
73 journey (1.0.4)
68 jquery-rails (3.1.2)
74 jquery-rails (3.1.2)
69 railties (>= 3.0, < 5.0)
75 railties (>= 3.0, < 5.0)
70 thor (>= 0.14, < 2.0)
76 thor (>= 0.14, < 2.0)
71 jquery-tablesorter (1.13.4)
77 jquery-tablesorter (1.13.4)
72 railties (>= 3.1, < 5)
78 railties (>= 3.1, < 5)
73 jquery-timepicker-addon-rails (1.4.1)
79 jquery-timepicker-addon-rails (1.4.1)
74 railties (>= 3.1)
80 railties (>= 3.1)
75 jquery-ui-rails (4.0.3)
81 jquery-ui-rails (4.0.3)
76 jquery-rails
82 jquery-rails
77 railties (>= 3.1.0)
83 railties (>= 3.1.0)
78 jquery-ui-sass-rails (4.0.3.0)
84 jquery-ui-sass-rails (4.0.3.0)
79 jquery-rails
85 jquery-rails
80 jquery-ui-rails (= 4.0.3)
86 jquery-ui-rails (= 4.0.3)
81 railties (>= 3.1.0)
87 railties (>= 3.1.0)
82 json (1.8.2)
88 json (1.8.2)
83 mail (2.5.4)
89 mail (2.5.4)
84 mime-types (~> 1.16)
90 mime-types (~> 1.16)
85 treetop (~> 1.4.8)
91 treetop (~> 1.4.8)
86 mime-types (1.25.1)
92 mime-types (1.25.1)
87 multi_json (1.10.1)
93 multi_json (1.10.1)
@@ -140,50 +146,52
140 select2-rails (4.0.1)
146 select2-rails (4.0.1)
141 thor (~> 0.14)
147 thor (~> 0.14)
142 sprockets (2.2.3)
148 sprockets (2.2.3)
143 hike (~> 1.2)
149 hike (~> 1.2)
144 multi_json (~> 1.0)
150 multi_json (~> 1.0)
145 rack (~> 1.0)
151 rack (~> 1.0)
146 tilt (~> 1.1, != 1.3.0)
152 tilt (~> 1.1, != 1.3.0)
147 test-unit (3.0.9)
153 test-unit (3.0.9)
148 power_assert
154 power_assert
149 thor (0.19.1)
155 thor (0.19.1)
150 tilt (1.4.1)
156 tilt (1.4.1)
151 treetop (1.4.15)
157 treetop (1.4.15)
152 polyglot
158 polyglot
153 polyglot (>= 0.3.1)
159 polyglot (>= 0.3.1)
154 tzinfo (0.3.43)
160 tzinfo (0.3.43)
155 uglifier (2.7.0)
161 uglifier (2.7.0)
156 execjs (>= 0.3.0)
162 execjs (>= 0.3.0)
157 json (>= 1.8.0)
163 json (>= 1.8.0)
158 will_paginate (3.0.7)
164 will_paginate (3.0.7)
159
165
160 PLATFORMS
166 PLATFORMS
161 ruby
167 ruby
162
168
163 DEPENDENCIES
169 DEPENDENCIES
170 + ace-rails-ap
164 autoprefixer-rails
171 autoprefixer-rails
165 best_in_place (~> 3.0.1)
172 best_in_place (~> 3.0.1)
166 bootstrap-sass (~> 3.2.0)
173 bootstrap-sass (~> 3.2.0)
167 bootstrap-switch-rails
174 bootstrap-switch-rails
168 bootstrap-toggle-rails
175 bootstrap-toggle-rails
169 coffee-rails (~> 3.2.2)
176 coffee-rails (~> 3.2.2)
170 dynamic_form
177 dynamic_form
171 haml
178 haml
179 + haml-rails
172 in_place_editing
180 in_place_editing
173 jquery-rails
181 jquery-rails
174 jquery-tablesorter
182 jquery-tablesorter
175 jquery-timepicker-addon-rails
183 jquery-timepicker-addon-rails
176 jquery-ui-sass-rails
184 jquery-ui-sass-rails
177 mail
185 mail
178 mysql2
186 mysql2
179 prototype-rails
187 prototype-rails
180 rails (= 3.2.21)
188 rails (= 3.2.21)
181 rdiscount
189 rdiscount
182 rouge
190 rouge
183 rspec-rails (~> 2.99.0)
191 rspec-rails (~> 2.99.0)
184 sass-rails (~> 3.2.6)
192 sass-rails (~> 3.2.6)
185 select2-rails
193 select2-rails
186 test-unit
194 test-unit
187 uglifier
195 uglifier
188 verification!
196 verification!
189 will_paginate (~> 3.0.7)
197 will_paginate (~> 3.0.7)
@@ -1,28 +1,29
1 // This is a manifest file that'll be compiled into application.js, which will include all the files
1 // This is a manifest file that'll be compiled into application.js, which will include all the files
2 // listed below.
2 // listed below.
3 //
3 //
4 // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
4 // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5 // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
5 // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
6 //
6 //
7 // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
7 // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8 // the compiled file.
8 // the compiled file.
9 //
9 //
10 // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
10 // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
11 // GO AFTER THE REQUIRES BELOW.
11 // GO AFTER THE REQUIRES BELOW.
12 //
12 //
13 //= require jquery
13 //= require jquery
14 //= require jquery_ujs
14 //= require jquery_ujs
15 //= require jquery.ui.all
15 //= require jquery.ui.all
16 //= require bootstrap-sprockets
16 //= require bootstrap-sprockets
17 //x= require bootstrap-switch
17 //x= require bootstrap-switch
18 //= require bootstrap-toggle
18 //= require bootstrap-toggle
19 //= require select2
19 //= require select2
20 //= require custom
20 //= require custom
21 + //= require ace-rails-ap
21
22
22
23
23 // since this is after blank line, it is not downloaded
24 // since this is after blank line, it is not downloaded
24 //x= require prototype
25 //x= require prototype
25 //x= require prototype_ujs
26 //x= require prototype_ujs
26 //x= require effects
27 //x= require effects
27 //x= require dragdrop
28 //x= require dragdrop
28 //x= require controls
29 //x= require controls
@@ -17,25 +17,29
17 $(".bootstrap-toggle").bootstrapToggle()
17 $(".bootstrap-toggle").bootstrapToggle()
18 $('.btn-file :file').on 'fileselect', (event, numFiles, label) ->
18 $('.btn-file :file').on 'fileselect', (event, numFiles, label) ->
19 input = $(this).parents('.input-group').find(':text')
19 input = $(this).parents('.input-group').find(':text')
20 log = if numFiles > 1 then numFiles + ' files selected' else label
20 log = if numFiles > 1 then numFiles + ' files selected' else label
21 if input.length
21 if input.length
22 input.val log
22 input.val log
23 else
23 else
24 if log
24 if log
25 alert log
25 alert log
26 return
26 return
27 $(".go-button").on 'click', (event) ->
27 $(".go-button").on 'click', (event) ->
28 link = $(this).attr("data-source")
28 link = $(this).attr("data-source")
29 url = $(link).val()
29 url = $(link).val()
30 if url
30 if url
31 window.location.href = url
31 window.location.href = url
32 return
32 return
33 $('.ajax-toggle').on 'click', (event) ->
33 $('.ajax-toggle').on 'click', (event) ->
34 target = $(event.target)
34 target = $(event.target)
35 target.removeClass 'btn-default'
35 target.removeClass 'btn-default'
36 target.removeClass 'btn-success'
36 target.removeClass 'btn-success'
37 target.addClass 'btn-warning'
37 target.addClass 'btn-warning'
38 target.text '...'
38 target.text '...'
39 return
39 return
40
40
41 + editor = ace.edit("editor")
42 + editor.setTheme("ace/theme/monokai")
43 + editor.getSession().setMode("ace/mode/javascript")
44 +
41 return
45 return
@@ -48,48 +48,56
48 @announcements = Announcement.find_for_frontpage
48 @announcements = Announcement.find_for_frontpage
49 render :action => 'login', :layout => 'empty'
49 render :action => 'login', :layout => 'empty'
50 end
50 end
51
51
52 def list
52 def list
53 prepare_list_information
53 prepare_list_information
54 end
54 end
55
55
56 def help
56 def help
57 @user = User.find(session[:user_id])
57 @user = User.find(session[:user_id])
58 end
58 end
59
59
60 def submit
60 def submit
61 user = User.find(session[:user_id])
61 user = User.find(session[:user_id])
62
62
63 @submission = Submission.new
63 @submission = Submission.new
64 @submission.problem_id = params[:submission][:problem_id]
64 @submission.problem_id = params[:submission][:problem_id]
65 @submission.user = user
65 @submission.user = user
66 @submission.language_id = 0
66 @submission.language_id = 0
67 if (params['file']) and (params['file']!='')
67 if (params['file']) and (params['file']!='')
68 @submission.source = File.open(params['file'].path,'r:UTF-8',&:read)
68 @submission.source = File.open(params['file'].path,'r:UTF-8',&:read)
69 @submission.source.encode!('UTF-8','UTF-8',invalid: :replace, replace: '')
69 @submission.source.encode!('UTF-8','UTF-8',invalid: :replace, replace: '')
70 @submission.source_filename = params['file'].original_filename
70 @submission.source_filename = params['file'].original_filename
71 end
71 end
72 +
73 + if (params[:editor_text])
74 + language = Language.find_by_id(params[:language_id])
75 + @submission.source = params[:editor_text]
76 + @submission.source_filename = "live_edit.#{language.ext}"
77 + @submission.language = language
78 + end
79 +
72 @submission.submitted_at = Time.new.gmtime
80 @submission.submitted_at = Time.new.gmtime
73 @submission.ip_address = request.remote_ip
81 @submission.ip_address = request.remote_ip
74
82
75 if GraderConfiguration.time_limit_mode? and user.contest_finished?
83 if GraderConfiguration.time_limit_mode? and user.contest_finished?
76 @submission.errors.add(:base,"The contest is over.")
84 @submission.errors.add(:base,"The contest is over.")
77 prepare_list_information
85 prepare_list_information
78 render :action => 'list' and return
86 render :action => 'list' and return
79 end
87 end
80
88
81 if @submission.valid?
89 if @submission.valid?
82 if @submission.save == false
90 if @submission.save == false
83 flash[:notice] = 'Error saving your submission'
91 flash[:notice] = 'Error saving your submission'
84 elsif Task.create(:submission_id => @submission.id,
92 elsif Task.create(:submission_id => @submission.id,
85 :status => Task::STATUS_INQUEUE) == false
93 :status => Task::STATUS_INQUEUE) == false
86 flash[:notice] = 'Error adding your submission to task queue'
94 flash[:notice] = 'Error adding your submission to task queue'
87 end
95 end
88 else
96 else
89 prepare_list_information
97 prepare_list_information
90 render :action => 'list' and return
98 render :action => 'list' and return
91 end
99 end
92 redirect_to :action => 'list'
100 redirect_to :action => 'list'
93 end
101 end
94
102
95 def source
103 def source
@@ -41,48 +41,52
41 importer = TestdataImporter.new(problem)
41 importer = TestdataImporter.new(problem)
42
42
43 if not importer.import_from_file(import_params[:file],
43 if not importer.import_from_file(import_params[:file],
44 import_params[:time_limit],
44 import_params[:time_limit],
45 import_params[:memory_limit],
45 import_params[:memory_limit],
46 import_params[:checker_name],
46 import_params[:checker_name],
47 import_to_db)
47 import_to_db)
48 problem.errors.add(:base,'Import error.')
48 problem.errors.add(:base,'Import error.')
49 end
49 end
50
50
51 return problem, importer.log_msg
51 return problem, importer.log_msg
52 end
52 end
53
53
54 def self.download_file_basedir
54 def self.download_file_basedir
55 return "#{Rails.root}/data/tasks"
55 return "#{Rails.root}/data/tasks"
56 end
56 end
57
57
58 def get_submission_stat
58 def get_submission_stat
59 result = Hash.new
59 result = Hash.new
60 #total number of submission
60 #total number of submission
61 result[:total_sub] = Submission.where(problem_id: self.id).count
61 result[:total_sub] = Submission.where(problem_id: self.id).count
62 result[:attempted_user] = Submission.where(problem_id: self.id).group_by(:user_id)
62 result[:attempted_user] = Submission.where(problem_id: self.id).group_by(:user_id)
63 end
63 end
64
64
65 + def long_name
66 + "[#{name}] #{full_name}"
67 + end
68 +
65 protected
69 protected
66
70
67 def self.to_i_or_default(st, default)
71 def self.to_i_or_default(st, default)
68 if st!=''
72 if st!=''
69 result = st.to_i
73 result = st.to_i
70 end
74 end
71 result ||= default
75 result ||= default
72 end
76 end
73
77
74 def self.to_f_or_default(st, default)
78 def self.to_f_or_default(st, default)
75 if st!=''
79 if st!=''
76 result = st.to_f
80 result = st.to_f
77 end
81 end
78 result ||= default
82 result ||= default
79 end
83 end
80
84
81 def self.extract_params_and_check(params, problem)
85 def self.extract_params_and_check(params, problem)
82 time_limit = Problem.to_f_or_default(params[:time_limit],
86 time_limit = Problem.to_f_or_default(params[:time_limit],
83 DEFAULT_TIME_LIMIT)
87 DEFAULT_TIME_LIMIT)
84 memory_limit = Problem.to_i_or_default(params[:memory_limit],
88 memory_limit = Problem.to_i_or_default(params[:memory_limit],
85 DEFAULT_MEMORY_LIMIT)
89 DEFAULT_MEMORY_LIMIT)
86
90
87 if time_limit<=0 or time_limit >60
91 if time_limit<=0 or time_limit >60
88 problem.errors.add(:base,'Time limit out of range.')
92 problem.errors.add(:base,'Time limit out of range.')
@@ -2,25 +2,25
2 - if submission==nil
2 - if submission==nil
3 = "-"
3 = "-"
4 - else
4 - else
5 - if submission.graded_at==nil
5 - if submission.graded_at==nil
6 =t 'main.submitted_at'
6 =t 'main.submitted_at'
7 = format_short_time(submission.submitted_at.localtime)
7 = format_short_time(submission.submitted_at.localtime)
8 - else
8 - else
9 = t 'main.graded_at'
9 = t 'main.graded_at'
10 = "#{format_short_time(submission.graded_at.localtime)}, "
10 = "#{format_short_time(submission.graded_at.localtime)}, "
11 - if GraderConfiguration['ui.show_score']
11 - if GraderConfiguration['ui.show_score']
12 = t 'main.score'
12 = t 'main.score'
13 = "#{(submission.points*100/submission.problem.full_score).to_i} "
13 = "#{(submission.points*100/submission.problem.full_score).to_i} "
14 = " ["
14 = " ["
15 %tt
15 %tt
16 = submission.grader_comment
16 = submission.grader_comment
17 = "]"
17 = "]"
18 - if GraderConfiguration.show_grading_result
18 - if GraderConfiguration.show_grading_result
19 = " | "
19 = " | "
20 = link_to '[detailed result]', :action => 'result', :id => submission.id
20 = link_to '[detailed result]', :action => 'result', :id => submission.id
21 = " | "
21 = " | "
22 = link_to("[#{t 'main.cmp_msg'}]", {:action => 'compiler_msg', :id => submission.id}, {:popup => true})
22 = link_to("[#{t 'main.cmp_msg'}]", {:action => 'compiler_msg', :id => submission.id}, {:popup => true})
23 = " | "
23 = " | "
24 = link_to("[#{t 'main.src_link'}]",{:action => 'source', :id => submission.id})
24 = link_to("[#{t 'main.src_link'}]",{:action => 'source', :id => submission.id})
25 = " | "
25 = " | "
26 - = link_to "[#{t 'main.submissions_link'}]", :action => 'submission', :id => problem_name
26 + = link_to "[#{t 'main.submissions_link'}]", :action => 'submission', :id => submission.problem.id
@@ -1,54 +1,62
1 CafeGrader::Application.routes.draw do
1 CafeGrader::Application.routes.draw do
2 + get "sources/direct_edit"
3 +
2 root :to => 'main#login'
4 root :to => 'main#login'
3
5
4
6
5 resources :contests
7 resources :contests
6
8
7 resources :sites
9 resources :sites
8
10
9 resources :announcements do
11 resources :announcements do
10 member do
12 member do
11 get 'toggle'
13 get 'toggle'
12 end
14 end
13 end
15 end
14
16
15
17
16 resources :problems do
18 resources :problems do
17 member do
19 member do
18 get 'toggle'
20 get 'toggle'
19 end
21 end
20 collection do
22 collection do
21 get 'turn_all_off'
23 get 'turn_all_off'
22 get 'turn_all_on'
24 get 'turn_all_on'
23 get 'import'
25 get 'import'
24 get 'manage'
26 get 'manage'
25 end
27 end
26 end
28 end
27
29
28 resources :grader_configuration, controller: 'configurations'
30 resources :grader_configuration, controller: 'configurations'
29
31
30 resources :users do
32 resources :users do
31 member do
33 member do
32 get 'toggle_activate', 'toggle_enable'
34 get 'toggle_activate', 'toggle_enable'
33 end
35 end
34 end
36 end
35
37
38 + #resources :sources do
39 + # collection do
40 + # end
41 + #end
42 + get 'sources/direct_edit/:pid', to: 'sources#direct_edit', as: 'direct_edit'
43 +
36
44
37 match 'tasks/view/:file.:ext' => 'tasks#view'
45 match 'tasks/view/:file.:ext' => 'tasks#view'
38 match 'tasks/download/:id/:file.:ext' => 'tasks#download'
46 match 'tasks/download/:id/:file.:ext' => 'tasks#download'
39 match 'heartbeat/:id/edit' => 'heartbeat#edit'
47 match 'heartbeat/:id/edit' => 'heartbeat#edit'
40
48
41 #main
49 #main
42 get "main/list"
50 get "main/list"
43 get 'main/submission(/:id)', to: 'main#submission', as: 'main_submission'
51 get 'main/submission(/:id)', to: 'main#submission', as: 'main_submission'
44
52
45 #report
53 #report
46 get 'report/problem_hof(/:id)', to: 'report#problem_hof', as: 'report_problem_hof'
54 get 'report/problem_hof(/:id)', to: 'report#problem_hof', as: 'report_problem_hof'
47 get "report/login"
55 get "report/login"
48
56
49 # See how all your routes lay out with "rake routes"
57 # See how all your routes lay out with "rake routes"
50
58
51 # This is a legacy wild controller route that's not recommended for RESTful applications.
59 # This is a legacy wild controller route that's not recommended for RESTful applications.
52 # Note: This route will make all actions in every controller accessible via GET requests.
60 # Note: This route will make all actions in every controller accessible via GET requests.
53 match ':controller(/:action(/:id))(.:format)'
61 match ':controller(/:action(/:id))(.:format)'
54 end
62 end
You need to be logged in to leave comments. Login now