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

r742:4c1b44c35caf - - 2 files changed: 15 inserted, 1 deleted

@@ -1,28 +1,30
1 1 - if submission.nil?
2 2 = "-"
3 3 - else
4 4 %strong= "Submission ID:"
5 5 = submission.id
6 6 %br
7 7 - unless submission.graded_at
8 8 %strong= t 'main.submitted_at:'
9 9 = format_full_time_ago(submission.submitted_at.localtime)
10 10 - else
11 11 %strong= t 'main.graded_at:'
12 12 = format_full_time_ago(submission.graded_at.localtime)
13 13 %br
14 14 - if GraderConfiguration['ui.show_score']
15 15 %strong=t 'main.score'
16 16 = "#{(submission.points*100/submission.problem.full_score).to_i} "
17 17 = " ["
18 18 %tt
19 19 = submission.grader_comment
20 20 = "]"
21 21 %br
22 22 %strong View:
23 23 - if GraderConfiguration.show_grading_result
24 24 = link_to '[detailed result]', :action => 'result', :id => submission.id
25 - = link_to "#{t 'main.cmp_msg'}", {:action => 'compiler_msg', :id => submission.id}, {popup: true,class: 'btn btn-xs btn-info'} if submission.graded_at
25 + - if submission.graded_at
26 + %button.btn.btn-info.btn-xs{type: 'button', data: {toggle: 'modal', target: '#compiler'}}
27 + =t 'main.cmp_msg'
26 28 = link_to "#{t 'main.src_link'}", download_submission_path(submission.id), class: 'btn btn-xs btn-info'
27 29 = link_to "#{t 'main.submissions_link'}", problem_submissions_path(problem_id), class: 'btn btn-xs btn-info'
28 30
@@ -1,297 +1,309
1 1 %h2 Live submit
2 2 %br
3 3
4 4 %textarea#text_sourcecode{style: "display:none"}~ @source
5 5 .container
6 6 .row
7 7 .col-md-12
8 8 .alert.alert-info
9 9 Write your code in the following box, choose language, and click submit button when finished
10 10 .row
11 11 .col-md-8
12 12 %div#editor{style: 'height: 500px; border-radius: 7px; font-size: 14px;'}
13 13 .col-md-4
14 14 - # submission form
15 15 = form_tag({controller: :main, :action => 'submit'}, :multipart => true, class: 'form') do
16 16
17 17 = hidden_field_tag 'editor_text', @source
18 18 = hidden_field_tag 'submission[problem_id]', @problem.id
19 19 .form-group
20 20 = label_tag "Task:"
21 21 = text_field_tag 'asdf', "#{@problem.long_name}", class: 'form-control', disabled: true
22 22 .form-group
23 23 = label_tag "Description:"
24 24 = link_to_description_if_any "[download] <span class='glyphicon glyphicon-file'></span>".html_safe, @problem
25 25
26 26 .form-group
27 27 = label_tag 'Language:'
28 28 = select_tag 'language_id', options_from_collection_for_select(Language.all, 'id', 'pretty_name', @lang_id || Language.find_by_pretty_name("Python").id || Language.first.id), class: 'form-control select', style: "width: 100px"
29 29 .form-group
30 30 .input-group
31 31 %span.input-group-btn
32 32 %span.btn.btn-default.btn-file
33 33 Browse
34 34 = file_field_tag 'load_file'
35 35 = text_field_tag '' , nil, {readonly: true, class: 'form-control'}
36 36 .form-group
37 37 = submit_tag 'Submit', class: 'btn btn-success', id: 'live_submit',
38 38 data: {confirm: "Submitting this source code for task #{@problem.long_name}?"}
39 39 - # latest submission status
40 40 .panel{class: (@submission && @submission.graded_at) ? "panel-info" : "panel-warning"}
41 41 .panel-heading
42 42 Latest Submission Status
43 43 = link_to "Refresh",get_latest_submission_status_submissions_path(@submission.user,@problem), class: "btn btn-default btn-sm", remote: true if @submission
44 44 .panel-body
45 45 %div#latest_status
46 46 - if @submission
47 47 = render :partial => 'submission_short',
48 48 :locals => {submission: @submission, problem_name: @problem.name, problem_id: @problem.id }
49 49 .row
50 50 .col-md-12
51 51 %h2 Console
52 52 %textarea#console{style: 'height: 100%; width: 100%;background-color:#000;color:#fff;font-family: consolas, monaco, "Droid Sans Mono";',rows: 20}
53 53
54 + .modal.fade#compiler{tabindex: -1,role: 'dialog'}
55 + .modal-dialog.modal-lg{role:'document'}
56 + .modal-content
57 + .modal-header
58 + %button.close{type: 'button', data: {dismissed: :modal}, aria: {label: 'close'}}
59 + %span{aria: {hidden: 'true'}, data: {dismiss: 'modal'}} &times;
60 + %h4 Compiler message
61 + .modal-body
62 + %pre#compiler_msg= @submission.compiler_message
63 + .modal-footer
64 + %button.btn.btn-default{type: 'button', data: {dismiss: 'modal'}} Close
65 +
54 66 :javascript
55 67 $(document).ready(function() {
56 68 e = ace.edit("editor")
57 69 e.setValue($("#text_sourcecode").val());
58 70 e.gotoLine(1);
59 71 $("#language_id").trigger('change');
60 72
61 73 $("#load_file").on('change',function(evt) {
62 74 var file = evt.target.files[0];
63 75 var reader = new FileReader();
64 76 reader.onload = function(theFile) {
65 77 var e = ace.edit("editor")
66 78 e.setValue(theFile.target.result);
67 79 e.gotoLine(1);
68 80 };
69 81 reader.readAsText(file)
70 82 });
71 83
72 84 //brython();
73 85 });
74 86
75 87
76 88
77 89
78 90
79 91 %script#__main__{type:'text/python3'}
80 92 :plain
81 93 import sys
82 94 import traceback
83 95
84 96 from browser import document as doc
85 97 from browser import window, alert, console
86 98
87 99 _credits = """ Thanks to CWI, CNRI, BeOpen.com, Zope Corporation and a cast of thousands
88 100 for supporting Python development. See www.python.org for more information."""
89 101
90 102 _copyright = """Copyright (c) 2012, Pierre Quentel pierre.quentel@gmail.com
91 103 All Rights Reserved.
92 104
93 105 Copyright (c) 2001-2013 Python Software Foundation.
94 106 All Rights Reserved.
95 107
96 108 Copyright (c) 2000 BeOpen.com.
97 109 All Rights Reserved.
98 110
99 111 Copyright (c) 1995-2001 Corporation for National Research Initiatives.
100 112 All Rights Reserved.
101 113
102 114 Copyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam.
103 115 All Rights Reserved."""
104 116
105 117 _license = """Copyright (c) 2012, Pierre Quentel pierre.quentel@gmail.com
106 118 All rights reserved.
107 119
108 120 Redistribution and use in source and binary forms, with or without
109 121 modification, are permitted provided that the following conditions are met:
110 122
111 123 Redistributions of source code must retain the above copyright notice, this
112 124 list of conditions and the following disclaimer. Redistributions in binary
113 125 form must reproduce the above copyright notice, this list of conditions and
114 126 the following disclaimer in the documentation and/or other materials provided
115 127 with the distribution.
116 128 Neither the name of the <ORGANIZATION> nor the names of its contributors may
117 129 be used to endorse or promote products derived from this software without
118 130 specific prior written permission.
119 131
120 132 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
121 133 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
122 134 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
123 135 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
124 136 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
125 137 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
126 138 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
127 139 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
128 140 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
129 141 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
130 142 POSSIBILITY OF SUCH DAMAGE.
131 143 """
132 144
133 145 def credits():
134 146 print(_credits)
135 147 credits.__repr__ = lambda:_credits
136 148
137 149 def copyright():
138 150 print(_copyright)
139 151 copyright.__repr__ = lambda:_copyright
140 152
141 153 def license():
142 154 print(_license)
143 155 license.__repr__ = lambda:_license
144 156
145 157 def write(data):
146 158 doc['console'].value += str(data)
147 159
148 160
149 161 sys.stdout.write = sys.stderr.write = write
150 162 history = []
151 163 current = 0
152 164 _status = "main" # or "block" if typing inside a block
153 165
154 166 # execution namespace
155 167 editor_ns = {'credits':credits,
156 168 'copyright':copyright,
157 169 'license':license,
158 170 '__name__':'__main__'}
159 171
160 172 def cursorToEnd(*args):
161 173 pos = len(doc['console'].value)
162 174 doc['console'].setSelectionRange(pos, pos)
163 175 doc['console'].scrollTop = doc['console'].scrollHeight
164 176
165 177 def get_col(area):
166 178 # returns the column num of cursor
167 179 sel = doc['console'].selectionStart
168 180 lines = doc['console'].value.split('\n')
169 181 for line in lines[:-1]:
170 182 sel -= len(line) + 1
171 183 return sel
172 184
173 185
174 186 def myKeyPress(event):
175 187 global _status, current
176 188 if event.keyCode == 9: # tab key
177 189 event.preventDefault()
178 190 doc['console'].value += " "
179 191 elif event.keyCode == 13: # return
180 192 src = doc['console'].value
181 193 if _status == "main":
182 194 currentLine = src[src.rfind('>>>') + 4:]
183 195 elif _status == "3string":
184 196 currentLine = src[src.rfind('>>>') + 4:]
185 197 currentLine = currentLine.replace('\n... ', '\n')
186 198 else:
187 199 currentLine = src[src.rfind('...') + 4:]
188 200 if _status == 'main' and not currentLine.strip():
189 201 doc['console'].value += '\n>>> '
190 202 event.preventDefault()
191 203 return
192 204 doc['console'].value += '\n'
193 205 history.append(currentLine)
194 206 current = len(history)
195 207 if _status == "main" or _status == "3string":
196 208 try:
197 209 _ = editor_ns['_'] = eval(currentLine, editor_ns)
198 210 if _ is not None:
199 211 write(repr(_)+'\n')
200 212 doc['console'].value += '>>> '
201 213 _status = "main"
202 214 except IndentationError:
203 215 doc['console'].value += '... '
204 216 _status = "block"
205 217 except SyntaxError as msg:
206 218 if str(msg) == 'invalid syntax : triple string end not found' or \
207 219 str(msg).startswith('Unbalanced bracket'):
208 220 doc['console'].value += '... '
209 221 _status = "3string"
210 222 elif str(msg) == 'eval() argument must be an expression':
211 223 try:
212 224 exec(currentLine, editor_ns)
213 225 except:
214 226 traceback.print_exc()
215 227 doc['console'].value += '>>> '
216 228 _status = "main"
217 229 elif str(msg) == 'decorator expects function':
218 230 doc['console'].value += '... '
219 231 _status = "block"
220 232 else:
221 233 traceback.print_exc()
222 234 doc['console'].value += '>>> '
223 235 _status = "main"
224 236 except:
225 237 traceback.print_exc()
226 238 doc['console'].value += '>>> '
227 239 _status = "main"
228 240 elif currentLine == "": # end of block
229 241 block = src[src.rfind('>>>') + 4:].splitlines()
230 242 block = [block[0]] + [b[4:] for b in block[1:]]
231 243 block_src = '\n'.join(block)
232 244 # status must be set before executing code in globals()
233 245 _status = "main"
234 246 try:
235 247 _ = exec(block_src, editor_ns)
236 248 if _ is not None:
237 249 print(repr(_))
238 250 except:
239 251 traceback.print_exc()
240 252 doc['console'].value += '>>> '
241 253 else:
242 254 doc['console'].value += '... '
243 255
244 256 cursorToEnd()
245 257 event.preventDefault()
246 258
247 259 def myKeyDown(event):
248 260 global _status, current
249 261 if event.keyCode == 37: # left arrow
250 262 sel = get_col(doc['console'])
251 263 if sel < 5:
252 264 event.preventDefault()
253 265 event.stopPropagation()
254 266 elif event.keyCode == 36: # line start
255 267 pos = doc['console'].selectionStart
256 268 col = get_col(doc['console'])
257 269 doc['console'].setSelectionRange(pos - col + 4, pos - col + 4)
258 270 event.preventDefault()
259 271 elif event.keyCode == 38: # up
260 272 if current > 0:
261 273 pos = doc['console'].selectionStart
262 274 col = get_col(doc['console'])
263 275 # remove current line
264 276 doc['console'].value = doc['console'].value[:pos - col + 4]
265 277 current -= 1
266 278 doc['console'].value += history[current]
267 279 event.preventDefault()
268 280 elif event.keyCode == 40: # down
269 281 if current < len(history) - 1:
270 282 pos = doc['console'].selectionStart
271 283 col = get_col(doc['console'])
272 284 # remove current line
273 285 doc['console'].value = doc['console'].value[:pos - col + 4]
274 286 current += 1
275 287 doc['console'].value += history[current]
276 288 event.preventDefault()
277 289 elif event.keyCode == 8: # backspace
278 290 src = doc['console'].value
279 291 lstart = src.rfind('\n')
280 292 if (lstart == -1 and len(src) < 5) or (len(src) - lstart < 6):
281 293 event.preventDefault()
282 294 event.stopPropagation()
283 295
284 296
285 297 doc['console'].bind('keypress', myKeyPress)
286 298 doc['console'].bind('keydown', myKeyDown)
287 299 doc['console'].bind('click', cursorToEnd)
288 300 v = sys.implementation.version
289 301 doc['console'].value = "Brython %s.%s.%s on %s %s\n>>> " % (
290 302 v[0], v[1], v[2], window.navigator.appName, window.navigator.appVersion)
291 303 #doc['console'].value += 'Type "copyright", "credits" or "license" for more information.'
292 304 doc['console'].focus()
293 305 cursorToEnd()
294 306
295 307
296 308
297 309
You need to be logged in to leave comments. Login now