@@ -344,7 +344,6 @@ $(document).on('turbolinks:load', function () {
344
344
var observeExportButtons = function ( ) {
345
345
$ ( '.export-start' ) . on ( 'click' , function ( e ) {
346
346
e . preventDefault ( ) ;
347
- new bootstrap . Modal ( $ ( '#export-modal' ) ) . show ( ) ;
348
347
exportExerciseStart ( $ ( this ) . data ( ) . exerciseId ) ;
349
348
} ) ;
350
349
body_selector . on ( 'click' , '.export-retry-button' , function ( ) {
@@ -356,11 +355,11 @@ $(document).on('turbolinks:load', function () {
356
355
}
357
356
358
357
var exportExerciseStart = function ( exerciseID ) {
359
- const $exerciseDiv = $ ( '#export- exercise' ) ;
360
- const $messageDiv = $exerciseDiv . children ( '.export -message' ) ;
361
- const $actionsDiv = $exerciseDiv . children ( '.export -exercise-actions' ) ;
358
+ const $exerciseDiv = $ ( '#exercise-transfer ' ) ;
359
+ const $messageDiv = $exerciseDiv . children ( '.transfer -message' ) ;
360
+ const $actionsDiv = $exerciseDiv . children ( '.transfer -exercise-actions' ) ;
362
361
363
- $messageDiv . removeClass ( 'export -failure' ) ;
362
+ $messageDiv . removeClass ( 'transfer -failure' ) ;
364
363
365
364
$messageDiv . html ( I18n . t ( 'exercises.export_codeharbor.checking_codeharbor' ) ) ;
366
365
$actionsDiv . html ( '<div class="spinner-border"></div>' ) ;
@@ -380,9 +379,9 @@ $(document).on('turbolinks:load', function () {
380
379
} ;
381
380
382
381
var exportExerciseConfirm = function ( exerciseID ) {
383
- const $exerciseDiv = $ ( '#export- exercise' ) ;
384
- const $messageDiv = $exerciseDiv . children ( '.export -message' ) ;
385
- const $actionsDiv = $exerciseDiv . children ( '.export -exercise-actions' ) ;
382
+ const $exerciseDiv = $ ( '#exercise-transfer ' ) ;
383
+ const $messageDiv = $exerciseDiv . children ( '.transfer -message' ) ;
384
+ const $actionsDiv = $exerciseDiv . children ( '.transfer -exercise-actions' ) ;
386
385
387
386
return $ . ajax ( {
388
387
type : 'POST' ,
@@ -395,11 +394,11 @@ $(document).on('turbolinks:load', function () {
395
394
if ( response . status === 'success' ) {
396
395
$messageDiv . addClass ( 'export-success' ) ;
397
396
setTimeout ( ( function ( ) {
398
- bootstrap . Modal . getInstance ( $ ( '#export -modal' ) ) ?. hide ( ) ;
397
+ bootstrap . Modal . getInstance ( $ ( '#transfer -modal' ) ) ?. hide ( ) ;
399
398
$messageDiv . html ( '' ) . removeClass ( 'export-success' ) ;
400
399
} ) , 3000 ) ;
401
400
} else {
402
- $messageDiv . addClass ( 'export -failure' ) ;
401
+ $messageDiv . addClass ( 'transfer -failure' ) ;
403
402
}
404
403
} ,
405
404
error : function ( a , b , c ) {
@@ -408,6 +407,76 @@ $(document).on('turbolinks:load', function () {
408
407
} ) ;
409
408
} ;
410
409
410
+ var observeImportButtons = function ( ) {
411
+ const $exerciseDiv = $ ( '#exercise-transfer' ) ;
412
+ const $messageDiv = $exerciseDiv . children ( '.transfer-message' ) ;
413
+ const $actionsDiv = $exerciseDiv . children ( '.transfer-exercise-actions' ) ;
414
+
415
+ $ ( '.import-start' ) . on ( 'click' , function ( e ) {
416
+ e . preventDefault ( ) ;
417
+ importExerciseStart ( ) ;
418
+ } ) ;
419
+ body_selector . on ( 'change' , '#proforma-file' , async function ( ) {
420
+ const file = event . target . files [ 0 ] ;
421
+ const formData = new FormData ( ) ;
422
+ formData . append ( 'file' , file ) ;
423
+
424
+ return $ . ajax ( {
425
+ type : 'POST' ,
426
+ url : Routes . import_start_exercises_path ( ) ,
427
+ data : formData ,
428
+ processData : false ,
429
+ contentType : false ,
430
+
431
+ success : function ( response ) {
432
+ if ( response . status === 'failure' )
433
+ $messageDiv . addClass ( 'transfer-failure' ) ;
434
+ else
435
+ $messageDiv . removeClass ( 'transfer-failure' ) ;
436
+ $messageDiv . html ( response . message ) ;
437
+ return $actionsDiv . html ( response . actions ) ;
438
+ } ,
439
+ error : function ( a , b , c ) {
440
+ return alert ( `error: ${ c } ` ) ;
441
+ }
442
+ } ) ;
443
+ } ) ;
444
+ body_selector . on ( 'click' , '.import-action' , async function ( ) {
445
+ let fileId = $ ( this ) . attr ( 'data-file-id' )
446
+ let importType = $ ( this ) . attr ( 'data-import-type' )
447
+ importExerciseConfirm ( fileId , importType )
448
+ } ) ;
449
+ }
450
+ var importExerciseStart = function ( ) {
451
+ const $exerciseDiv = $ ( '#exercise-transfer' ) ;
452
+ const $messageDiv = $exerciseDiv . children ( '.transfer-message' ) ;
453
+ const $actionsDiv = $exerciseDiv . children ( '.transfer-exercise-actions' ) ;
454
+
455
+ $messageDiv . removeClass ( 'transfer-failure' ) ;
456
+ $messageDiv . html ( I18n . t ( 'exercises.import_proforma.dialog.start' ) ) ;
457
+ $actionsDiv . html ( `<label for="proforma-file" class="btn btn-primary">${ I18n . t ( 'exercises.import_start.upload_file' ) } </label><input type="file" id="proforma-file" name="proforma-file" accept=".zip,application/zip" >` ) ;
458
+ }
459
+
460
+ var importExerciseConfirm = function ( fileId , importType ) {
461
+ const $exerciseDiv = $ ( '#exercise-transfer' ) ;
462
+ const $messageDiv = $exerciseDiv . children ( '.transfer-message' ) ;
463
+ const $actionsDiv = $exerciseDiv . children ( '.transfer-exercise-actions' ) ;
464
+
465
+ $ . ajax ( {
466
+ type : 'POST' ,
467
+ url : Routes . import_confirm_exercises_path ( ) ,
468
+ data : { file_id : fileId , import_type : importType } ,
469
+ dataType : 'json' ,
470
+
471
+ success : function ( response ) {
472
+ $messageDiv . html ( response . message ) ;
473
+ return $actionsDiv . html ( response . actions ) ;
474
+ } ,
475
+ error : function ( a , b , c ) {
476
+ return alert ( `error: ${ c } ` ) ;
477
+ }
478
+ } ) ;
479
+ }
411
480
var overrideTextareaTabBehavior = function ( ) {
412
481
$ ( '.mb-3 textarea[name$="[content]"]' ) . on ( 'keydown' , function ( event ) {
413
482
if ( event . which === TAB_KEY_CODE ) {
@@ -463,6 +532,7 @@ $(document).on('turbolinks:load', function () {
463
532
if ( $ ( 'table:not(#tags-table)' ) . isPresent ( ) ) {
464
533
enableBatchUpdate ( ) ;
465
534
observeExportButtons ( ) ;
535
+ observeImportButtons ( ) ;
466
536
} else if ( $ ( '.edit_exercise, .new_exercise' ) . isPresent ( ) ) {
467
537
const form_selector = $ ( 'form' ) ;
468
538
execution_environments = form_selector . data ( 'execution-environments' ) ;
@@ -499,4 +569,4 @@ $(document).on('turbolinks:load', function () {
499
569
}
500
570
501
571
502
- } ) ;
572
+ } ) ;
0 commit comments