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
@@ -48,25 +48,28
48 48 gem 'jquery-timepicker-addon-rails'
49 49 gem 'jquery-tablesorter'
50 50
51 51 #syntax highlighter
52 52 gem 'rouge'
53 53
54 54 #add bootstrap
55 55 gem 'bootstrap-sass', '~> 3.2.0'
56 56 gem 'bootstrap-switch-rails'
57 57 gem 'bootstrap-toggle-rails'
58 58 gem 'autoprefixer-rails'
59 59
60 + gem 'ace-rails-ap'
61 +
60 62
61 63 gem 'haml'
64 + gem 'haml-rails'
62 65 gem 'mail'
63 66 gem 'rdiscount'
64 67 gem 'test-unit'
65 68 gem 'will_paginate', '~> 3.0.7'
66 69 gem 'dynamic_form'
67 70 gem 'in_place_editing'
68 71 gem 'verification', :git => 'https://github.com/sikachu/verification.git'
69 72
70 73 group :test, :development do
71 74 gem 'rspec-rails', '~> 2.99.0'
72 75 end
@@ -1,23 +1,24
1 1 GIT
2 2 remote: https://github.com/sikachu/verification.git
3 3 revision: 76eaf51b13276ecae54bd9cd115832595d2ff56d
4 4 specs:
5 5 verification (1.0.3)
6 6 actionpack (>= 3.0.0, < 5.0)
7 7 activesupport (>= 3.0.0, < 5.0)
8 8
9 9 GEM
10 10 remote: https://rubygems.org/
11 11 specs:
12 + ace-rails-ap (4.0.2)
12 13 actionmailer (3.2.21)
13 14 actionpack (= 3.2.21)
14 15 mail (~> 2.5.4)
15 16 actionpack (3.2.21)
16 17 activemodel (= 3.2.21)
17 18 activesupport (= 3.2.21)
18 19 builder (~> 3.0.0)
19 20 erubis (~> 2.7.0)
20 21 journey (~> 1.0.4)
21 22 rack (~> 1.4.5)
22 23 rack-cache (~> 1.2)
23 24 rack-test (~> 0.6.1)
@@ -52,24 +53,29
52 53 coffee-script (>= 2.2.0)
53 54 railties (~> 3.2.0)
54 55 coffee-script (2.3.0)
55 56 coffee-script-source
56 57 execjs
57 58 coffee-script-source (1.9.0)
58 59 diff-lcs (1.2.5)
59 60 dynamic_form (1.1.4)
60 61 erubis (2.7.0)
61 62 execjs (2.3.0)
62 63 haml (4.0.6)
63 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 70 hike (1.2.3)
65 71 i18n (0.7.0)
66 72 in_place_editing (1.2.0)
67 73 journey (1.0.4)
68 74 jquery-rails (3.1.2)
69 75 railties (>= 3.0, < 5.0)
70 76 thor (>= 0.14, < 2.0)
71 77 jquery-tablesorter (1.13.4)
72 78 railties (>= 3.1, < 5)
73 79 jquery-timepicker-addon-rails (1.4.1)
74 80 railties (>= 3.1)
75 81 jquery-ui-rails (4.0.3)
@@ -152,32 +158,34
152 158 polyglot
153 159 polyglot (>= 0.3.1)
154 160 tzinfo (0.3.43)
155 161 uglifier (2.7.0)
156 162 execjs (>= 0.3.0)
157 163 json (>= 1.8.0)
158 164 will_paginate (3.0.7)
159 165
160 166 PLATFORMS
161 167 ruby
162 168
163 169 DEPENDENCIES
170 + ace-rails-ap
164 171 autoprefixer-rails
165 172 best_in_place (~> 3.0.1)
166 173 bootstrap-sass (~> 3.2.0)
167 174 bootstrap-switch-rails
168 175 bootstrap-toggle-rails
169 176 coffee-rails (~> 3.2.2)
170 177 dynamic_form
171 178 haml
179 + haml-rails
172 180 in_place_editing
173 181 jquery-rails
174 182 jquery-tablesorter
175 183 jquery-timepicker-addon-rails
176 184 jquery-ui-sass-rails
177 185 mail
178 186 mysql2
179 187 prototype-rails
180 188 rails (= 3.2.21)
181 189 rdiscount
182 190 rouge
183 191 rspec-rails (~> 2.99.0)
@@ -9,20 +9,21
9 9 //
10 10 // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
11 11 // GO AFTER THE REQUIRES BELOW.
12 12 //
13 13 //= require jquery
14 14 //= require jquery_ujs
15 15 //= require jquery.ui.all
16 16 //= require bootstrap-sprockets
17 17 //x= require bootstrap-switch
18 18 //= require bootstrap-toggle
19 19 //= require select2
20 20 //= require custom
21 + //= require ace-rails-ap
21 22
22 23
23 24 // since this is after blank line, it is not downloaded
24 25 //x= require prototype
25 26 //x= require prototype_ujs
26 27 //x= require effects
27 28 //x= require dragdrop
28 29 //x= require controls
@@ -29,13 +29,17
29 29 url = $(link).val()
30 30 if url
31 31 window.location.href = url
32 32 return
33 33 $('.ajax-toggle').on 'click', (event) ->
34 34 target = $(event.target)
35 35 target.removeClass 'btn-default'
36 36 target.removeClass 'btn-success'
37 37 target.addClass 'btn-warning'
38 38 target.text '...'
39 39 return
40 40
41 + editor = ace.edit("editor")
42 + editor.setTheme("ace/theme/monokai")
43 + editor.getSession().setMode("ace/mode/javascript")
44 +
41 45 return
@@ -60,24 +60,32
60 60 def submit
61 61 user = User.find(session[:user_id])
62 62
63 63 @submission = Submission.new
64 64 @submission.problem_id = params[:submission][:problem_id]
65 65 @submission.user = user
66 66 @submission.language_id = 0
67 67 if (params['file']) and (params['file']!='')
68 68 @submission.source = File.open(params['file'].path,'r:UTF-8',&:read)
69 69 @submission.source.encode!('UTF-8','UTF-8',invalid: :replace, replace: '')
70 70 @submission.source_filename = params['file'].original_filename
71 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 80 @submission.submitted_at = Time.new.gmtime
73 81 @submission.ip_address = request.remote_ip
74 82
75 83 if GraderConfiguration.time_limit_mode? and user.contest_finished?
76 84 @submission.errors.add(:base,"The contest is over.")
77 85 prepare_list_information
78 86 render :action => 'list' and return
79 87 end
80 88
81 89 if @submission.valid?
82 90 if @submission.save == false
83 91 flash[:notice] = 'Error saving your submission'
@@ -53,24 +53,28
53 53
54 54 def self.download_file_basedir
55 55 return "#{Rails.root}/data/tasks"
56 56 end
57 57
58 58 def get_submission_stat
59 59 result = Hash.new
60 60 #total number of submission
61 61 result[:total_sub] = Submission.where(problem_id: self.id).count
62 62 result[:attempted_user] = Submission.where(problem_id: self.id).group_by(:user_id)
63 63 end
64 64
65 + def long_name
66 + "[#{name}] #{full_name}"
67 + end
68 +
65 69 protected
66 70
67 71 def self.to_i_or_default(st, default)
68 72 if st!=''
69 73 result = st.to_i
70 74 end
71 75 result ||= default
72 76 end
73 77
74 78 def self.to_f_or_default(st, default)
75 79 if st!=''
76 80 result = st.to_f
@@ -14,13 +14,13
14 14 = " ["
15 15 %tt
16 16 = submission.grader_comment
17 17 = "]"
18 18 - if GraderConfiguration.show_grading_result
19 19 = " | "
20 20 = link_to '[detailed result]', :action => 'result', :id => submission.id
21 21 = " | "
22 22 = link_to("[#{t 'main.cmp_msg'}]", {:action => 'compiler_msg', :id => submission.id}, {:popup => true})
23 23 = " | "
24 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,13 +1,15
1 1 CafeGrader::Application.routes.draw do
2 + get "sources/direct_edit"
3 +
2 4 root :to => 'main#login'
3 5
4 6
5 7 resources :contests
6 8
7 9 resources :sites
8 10
9 11 resources :announcements do
10 12 member do
11 13 get 'toggle'
12 14 end
13 15 end
@@ -24,24 +26,30
24 26 get 'manage'
25 27 end
26 28 end
27 29
28 30 resources :grader_configuration, controller: 'configurations'
29 31
30 32 resources :users do
31 33 member do
32 34 get 'toggle_activate', 'toggle_enable'
33 35 end
34 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 45 match 'tasks/view/:file.:ext' => 'tasks#view'
38 46 match 'tasks/download/:id/:file.:ext' => 'tasks#download'
39 47 match 'heartbeat/:id/edit' => 'heartbeat#edit'
40 48
41 49 #main
42 50 get "main/list"
43 51 get 'main/submission(/:id)', to: 'main#submission', as: 'main_submission'
44 52
45 53 #report
46 54 get 'report/problem_hof(/:id)', to: 'report#problem_hof', as: 'report_problem_hof'
47 55 get "report/login"
You need to be logged in to leave comments. Login now