~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to ivle/webapp/tutorial/media/exercise_admin.js

  • Committer: William Grant
  • Date: 2009-03-17 04:48:07 UTC
  • mfrom: (1099.1.243 exercise-ui)
  • Revision ID: grantw@unimelb.edu.au-20090317044807-pozdt54fapazp2sp
Merge lp:~ivle-dev/ivle/exercise-ui.

Lecturers can now add and edit exercises, and worksheets can be written
in RST directly inside IVLE.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* IVLE - Informatics Virtual Learning Environment
 
2
 * Copyright (C) 2007-2009 The University of Melbourne
 
3
 *
 
4
 * This program is free software; you can redistribute it and/or modify
 
5
 * it under the terms of the GNU General Public License as published by
 
6
 * the Free Software Foundation; either version 2 of the License, or
 
7
 * (at your option) any later version.
 
8
 *
 
9
 * This program is distributed in the hope that it will be useful,
 
10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
12
 * GNU General Public License for more details.
 
13
 *
 
14
 * You should have received a copy of the GNU General Public License
 
15
 * along with this program; if not, write to the Free Software
 
16
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
17
 *
 
18
 * Author: Nick Chadwick
 
19
 */
 
20
 
 
21
/* Show and hide the given page element */
 
22
function tog(something)
 
23
{
 
24
  $('#' + something).toggle("slow");
 
25
}
 
26
 
 
27
function add_exercise()
 
28
{
 
29
    var exercise_id = $('#exercise_id').val();
 
30
    var exercise_name = $('#exercise_name').val();
 
31
    var exercise_num_rows = $('#exercise_num_rows').val();
 
32
    var exercise_desc = $('#exercise_desc').val();
 
33
    var exercise_partial = $('#exercise_partial').val();
 
34
    var exercise_solution = $('#exercise_solution').val();
 
35
    var exercise_include = $('#exercise_include').val();
 
36
 
 
37
    var callback = function(xhr)
 
38
    {
 
39
        var testresponse;
 
40
        try
 
41
        {
 
42
            testresponse = JSON.parse(xhr.responseText);
 
43
            alert('Exercise Created');
 
44
            window.location = '/+exercises';
 
45
        }
 
46
        catch (ex)
 
47
        {
 
48
            alert('Error: Could not add exercise');
 
49
            return;
 
50
        }
 
51
    }
 
52
    
 
53
    update_path = "api/+exercises";
 
54
    
 
55
    var args = {'identifier': exercise_id , 'name': exercise_name, 
 
56
                'description': exercise_desc, 'partial': exercise_partial,
 
57
                'solution': exercise_solution, 'include': exercise_include,
 
58
                'num_rows': exercise_num_rows, 'ivle.op': 'add_exercise'};
 
59
    ajax_call(callback, update_path, "", args, 'POST');
 
60
    
 
61
}
 
62
 
 
63
/* Edit the exercise values */
 
64
function edit_exercise()
 
65
{
 
66
 
 
67
    var exercise_id = $('#exercise_id').val();
 
68
    var exercise_name = $('#exercise_name').val();
 
69
    var exercise_num_rows = $('#exercise_num_rows').val();
 
70
    var exercise_desc = $('#exercise_desc').val();
 
71
    var exercise_partial = $('#exercise_partial').val();
 
72
    var exercise_solution = $('#exercise_solution').val();
 
73
    var exercise_include = $('#exercise_include').val();
 
74
    
 
75
    var callback = function(xhr)
 
76
    {
 
77
        var testresponse;
 
78
        try
 
79
        {
 
80
            testresponse = JSON.parse(xhr.responseText);
 
81
            alert('Exercise Saved');
 
82
            return;
 
83
        }
 
84
        catch(ex)
 
85
        {
 
86
            alert('Error updating Exercise');
 
87
            return;
 
88
        }
 
89
    }
 
90
    
 
91
    update_path = "api/+exercises/" + exercise;
 
92
    
 
93
    var args = {'name': exercise_name, 'description': exercise_desc, 
 
94
                'partial': exercise_partial, 'solution': exercise_solution,
 
95
                'include': exercise_include, 'num_rows': exercise_num_rows,
 
96
                'ivle.op': 'edit_exercise'};
 
97
    ajax_call(callback, update_path, "", args, 'POST');
 
98
}
 
99
 
 
100
/* Modify, add and delete suites */
 
101
function edit_suite(suiteid)
 
102
{
 
103
    var desc = $('#test_suite_description_' + suiteid).val();
 
104
    var func = $('#test_suite_function_' + suiteid).val();
 
105
    var stdin = $('#test_suite_stdin_' + suiteid).val();
 
106
    
 
107
    var callback = function(xhr)
 
108
    {
 
109
        var testresponse;
 
110
        try
 
111
        {
 
112
            testresponse = JSON.parse(xhr.responseText);
 
113
            alert('Suite Saved');
 
114
            window.location.reload();
 
115
            return;
 
116
        }
 
117
        catch(ex)
 
118
        {
 
119
            alert('Error Saving Test Suite');
 
120
            return;
 
121
        }
 
122
    }
 
123
    
 
124
    var args = {'ivle.op': 'edit_suite', 'description': desc, 'function': func,
 
125
                'stdin': stdin, 'suiteid': suiteid};
 
126
    update_path = "api/+exercises/" + exercise;
 
127
    ajax_call(callback, update_path, "", args, 'POST');
 
128
}
 
129
 
 
130
function add_suite()
 
131
{
 
132
    var desc = $('#new_test_suite_description').val();
 
133
    var func = $('#new_test_suite_function').val();
 
134
    var stdin = $('#new_test_suite_stdin').val();
 
135
    
 
136
    var callback = function(xhr)
 
137
    {
 
138
        var testresponse;
 
139
        try
 
140
        {
 
141
            testresponse = JSON.parse(xhr.responseText);
 
142
            alert('Suite Created Sucessfully');
 
143
            window.location.reload();
 
144
            return;
 
145
        }
 
146
        catch(ex)
 
147
        {
 
148
            alert('Error Creating Test Suite');
 
149
        }
 
150
    }
 
151
    
 
152
    var args = {'ivle.op': 'add_suite', 'description': desc, 'function': func,
 
153
                'stdin': stdin};
 
154
    update_path = "api/+exercises/" + exercise;
 
155
    ajax_call(callback, update_path, "", args, 'POST');
 
156
}
 
157
 
 
158
function delete_suite(suiteid)
 
159
{
 
160
    var callback = function(xhr)
 
161
    {
 
162
        var testresponse;
 
163
        try
 
164
        {
 
165
            testresponse = JSON.parse(xhr.responseText);
 
166
            alert('Suite Deleted.');
 
167
            window.location.reload()
 
168
            return;
 
169
        }
 
170
        catch (ex)
 
171
        {
 
172
            alert('Could not delete suite.');
 
173
        }
 
174
        
 
175
    }
 
176
    
 
177
    var args = {'ivle.op': 'delete_suite', 'suiteid': suiteid}
 
178
    update_path = "api/+exercises/" + exercise;
 
179
    ajax_call(callback, update_path, "", args, 'POST');
 
180
}
 
181
 
 
182
/* Modify and add Variables */
 
183
function edit_var(varid, suiteid)
 
184
{
 
185
    var var_name = $('#var_type_' + varid).val();
 
186
    var var_val = $('#var_val' + varid).val();
 
187
    var var_type = $('#var_name_' + varid).val();
 
188
    var argno = $('#var_argno_' + varid).val();
 
189
 
 
190
    var callback = function(xhr)
 
191
    {
 
192
        var testresponse;
 
193
        try
 
194
        {
 
195
            testresponse = JSON.parse(xhr.responseText);
 
196
            alert('Variable Added Sucessfully');
 
197
            window.location.reload();
 
198
            return;
 
199
        }
 
200
        catch(ex)
 
201
        {
 
202
            alert('Error Creating Test Suite');
 
203
            return;
 
204
        }
 
205
    }
 
206
 
 
207
    var args = {'ivle.op': 'edit_var', 'var_name': var_name,
 
208
                'var_val': var_val, 'var_type': var_type, 'argno': argno,
 
209
                'varid': varid, 'suiteid': suiteid};
 
210
    
 
211
    update_path = "api/+exercises/" + exercise;
 
212
    ajax_call(callback, update_path, "", args, 'POST')
 
213
 
 
214
}
 
215
 
 
216
function add_var(suiteid)
 
217
{
 
218
    var var_name = $('#new_var_name_' + suiteid).val();
 
219
    var var_val = $('#new_var_val_' + suiteid).val();
 
220
    var var_type = $('#new_var_type_' + suiteid).val();
 
221
    var argno = $('#new_var_argno_' + suiteid).val();
 
222
    
 
223
    var callback = function(xhr)
 
224
    {
 
225
        var testresponse;
 
226
        try
 
227
        {
 
228
            testresponse = JSON.parse(xhr.responseText);
 
229
            alert('Variable Added Sucessfully');
 
230
            window.location.reload();
 
231
            return;
 
232
        }
 
233
        catch(ex)
 
234
        {
 
235
            alert('Error Adding Variable.');
 
236
            return;
 
237
        }
 
238
    }
 
239
    
 
240
    var args = {'ivle.op': 'add_var', 'var_name': var_name, 
 
241
                'var_val': var_val, 'var_type': var_type, 
 
242
                'argno': argno, 'suiteid': suiteid};
 
243
    update_path = "api/+exercises/" + exercise;
 
244
    ajax_call(callback, update_path, "", args, 'POST');
 
245
}
 
246
 
 
247
function delete_var(varid, suiteid)
 
248
{
 
249
    var callback = function(xhr)
 
250
    {
 
251
        var testresponse;
 
252
        try
 
253
        {
 
254
            testresponse = JSON.parse(xhr.responseText);
 
255
            alert('Variable Deleted.');
 
256
            window.location.reload();
 
257
            return;
 
258
        }
 
259
        catch(ex)
 
260
        {
 
261
            alert('Error Deleting Variable');
 
262
            return;
 
263
        }
 
264
    }
 
265
    var args = {'ivle.op': 'delete_var', 'suiteid': suiteid, 'varid': varid};
 
266
    update_path = "api/+exercises/" + exercise;
 
267
    ajax_call(callback, update_path, "", args, 'POST');
 
268
 
 
269
}
 
270
 
 
271
/* Add and edit test case parts */
 
272
 
 
273
function add_test_case(suiteid)
 
274
{
 
275
    var passmsg = $("#new_test_case_pass_" + suiteid).val();
 
276
    var failmsg = $("#new_test_case_fail_" + suiteid).val();
 
277
    var case_default = $("#new_test_case_default_" + suiteid).val();
 
278
    
 
279
    var callback = function(xhr)
 
280
    {
 
281
        var testresponse;
 
282
        try
 
283
        {
 
284
            testresponse = JSON.parse(xhr.responseText);
 
285
            alert('Test Case Added Sucessfully');
 
286
            window.location.reload();
 
287
            return;
 
288
        }
 
289
        catch(ex)
 
290
        {
 
291
            alert('Error Creating Test Suite');
 
292
            return;
 
293
        }
 
294
    }
 
295
    
 
296
    var args = {'ivle.op': 'add_testcase', 'passmsg': passmsg, 
 
297
                'failmsg': failmsg, 'default': case_default,
 
298
                'suiteid': suiteid};
 
299
    update_path = "api/+exercises/" + exercise;
 
300
    ajax_call(callback, update_path, "", args, 'POST');
 
301
    
 
302
}
 
303
 
 
304
function edit_test_case(testid, suiteid)
 
305
{
 
306
    var passmsg = $("#test_case_pass_" + testid + "_" + suiteid).val();
 
307
    var failmsg = $("#test_case_fail_" + testid + "_" + suiteid).val();
 
308
    var case_default = $("#test_case_default_" + testid + "_" + suiteid).val();
 
309
    
 
310
    var callback = function(xhr)
 
311
    {
 
312
        var testresponse;
 
313
        try
 
314
        {
 
315
            testresponse = JSON.parse(xhr.responseText);
 
316
            alert('Test Case Modified Sucessfully');
 
317
            return;
 
318
        }
 
319
        catch(ex)
 
320
        {
 
321
            alert('Error Saving Test Case');
 
322
            return;
 
323
        }
 
324
    }
 
325
    
 
326
    var args = {'ivle.op': 'edit_testcase', 'passmsg': passmsg, 
 
327
                'failmsg': failmsg, 'default': case_default,
 
328
                'testid':testid, 'suiteid': suiteid};
 
329
    update_path = "api/+exercises/" + exercise;
 
330
    ajax_call(callback, update_path, "", args, 'POST');
 
331
}
 
332
 
 
333
function delete_testcase(testid, suiteid)
 
334
{
 
335
    var callback = function(xhr)
 
336
    {
 
337
        var testresponse;
 
338
        try
 
339
        {
 
340
            testresponse = JSON.parse(xhr.responseText);
 
341
            alert('Test Case Deleted.');
 
342
            window.location.reload();
 
343
            return;
 
344
        }
 
345
        catch(ex)
 
346
        {
 
347
            alert('Error Deleting Test Case');
 
348
            return;
 
349
        }
 
350
    }
 
351
    
 
352
    var args = {'ivle.op': 'delete_testcase', 'testid': testid, 
 
353
                'suiteid': suiteid};
 
354
    update_path = "api/+exercises/" + exercise;
 
355
    ajax_call(callback, update_path, "", args, 'POST');
 
356
}
 
357
 
 
358
/* Functions to add, edit, and delete test case parts */
 
359
function edit_test_part(partid, testid, suiteid)
 
360
{
 
361
    var part_type = $("#test_part_part_type_" + partid).val();
 
362
    var test_type = $("#test_part_test_type_" + partid).val();
 
363
    var data = $("#test_part_data_" + partid).val();
 
364
    var filename = $("#test_part_file_" + partid).val();
 
365
    
 
366
    var callback = function(xhr)
 
367
    {
 
368
        var testresponse;
 
369
        try
 
370
        {
 
371
            testresponse = JSON.parse(xhr.responseText);
 
372
            alert("Test Part Modified");
 
373
        }
 
374
        catch (ex)
 
375
        {
 
376
            alert("Error Adding Test Part");
 
377
            return;
 
378
        }
 
379
    }
 
380
    
 
381
    var args = {'ivle.op': 'edit_testpart', 'part_type': part_type, 
 
382
                'test_type': test_type, 'data': data, 'filename': filename,
 
383
                'partid': partid, 'testid': testid, 'suiteid': suiteid};
 
384
    update_path = "api/+exercises/" + exercise;
 
385
    ajax_call(callback, update_path, "", args, 'POST');
 
386
}
 
387
 
 
388
function add_test_part(testid, suiteid)
 
389
{
 
390
    var part_type = $("#new_test_part_part_type_" + testid).val();
 
391
    var test_type = $("#new_test_part_test_type_" + testid).val();
 
392
    var data = $("#new_test_part_data_" + testid).val();
 
393
    var filename = $("#new_test_part_file_" + testid).val();
 
394
 
 
395
    var savebutton = $("#new_test_part_save_" + testid);
 
396
    savebutton.attr('value', 'Saving...');
 
397
    savebutton.attr('disabled', 'disabled');
 
398
    
 
399
    var callback = function(xhr)
 
400
    {
 
401
        var testresponse;
 
402
        var test_part_id;
 
403
        var test_parts = $("#test_case_parts_" + testid);
 
404
        try
 
405
        {
 
406
            testresponse = JSON.parse(xhr.responseText);
 
407
            savebutton.attr('value', 'Saving...');
 
408
            savebutton.removeAttr('disabled');
 
409
            
 
410
            alert("Test Part Added");
 
411
            window.location.reload();
 
412
            return;
 
413
        }
 
414
        catch (ex)
 
415
        {
 
416
            alert("Error Adding Test Part");
 
417
            return;
 
418
        }
 
419
    }
 
420
    
 
421
    var args = {'ivle.op': 'add_testpart', 'part_type': part_type, 
 
422
                'test_type': test_type, 'data': data, 'filename': filename,
 
423
                'testid': testid, 'suiteid': suiteid};
 
424
    update_path = "api/+exercises/" + exercise;
 
425
    ajax_call(callback, update_path, "", args, 'POST');
 
426
}
 
427
 
 
428
function delete_testpart(partid, testid, suiteid)
 
429
{
 
430
    var callback = function(xhr)
 
431
    {
 
432
        try
 
433
        {
 
434
            testresponse = JSON.parse(xhr.responseText);
 
435
            alert("Test Part Deleted.");
 
436
            window.location.reload();
 
437
            return;
 
438
        }
 
439
        catch (ex)
 
440
        {
 
441
            alert("Error Deleting Test Part");
 
442
            return;
 
443
        }
 
444
    }
 
445
    
 
446
    var args = {'ivle.op': 'delete_testpart', 'partid': partid, 
 
447
                'testid': testid, 'suiteid': suiteid};
 
448
    update_path = "api/+exercises/" + exercise;
 
449
    ajax_call(callback, update_path, "", args, 'POST');
 
450
}