@@ -344,7 +344,6 @@ $(document).on('turbolinks:load', function () {
344344 var observeExportButtons = function ( ) {
345345 $ ( '.export-start' ) . on ( 'click' , function ( e ) {
346346 e . preventDefault ( ) ;
347- new bootstrap . Modal ( $ ( '#export-modal' ) ) . show ( ) ;
348347 exportExerciseStart ( $ ( this ) . data ( ) . exerciseId ) ;
349348 } ) ;
350349 body_selector . on ( 'click' , '.export-retry-button' , function ( ) {
@@ -356,11 +355,11 @@ $(document).on('turbolinks:load', function () {
356355 }
357356
358357 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' ) ;
362361
363- $messageDiv . removeClass ( 'export -failure' ) ;
362+ $messageDiv . removeClass ( 'transfer -failure' ) ;
364363
365364 $messageDiv . html ( I18n . t ( 'exercises.export_codeharbor.checking_codeharbor' ) ) ;
366365 $actionsDiv . html ( '<div class="spinner-border"></div>' ) ;
@@ -380,9 +379,9 @@ $(document).on('turbolinks:load', function () {
380379 } ;
381380
382381 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' ) ;
386385
387386 return $ . ajax ( {
388387 type : 'POST' ,
@@ -395,11 +394,11 @@ $(document).on('turbolinks:load', function () {
395394 if ( response . status === 'success' ) {
396395 $messageDiv . addClass ( 'export-success' ) ;
397396 setTimeout ( ( function ( ) {
398- bootstrap . Modal . getInstance ( $ ( '#export -modal' ) ) ?. hide ( ) ;
397+ bootstrap . Modal . getInstance ( $ ( '#transfer -modal' ) ) ?. hide ( ) ;
399398 $messageDiv . html ( '' ) . removeClass ( 'export-success' ) ;
400399 } ) , 3000 ) ;
401400 } else {
402- $messageDiv . addClass ( 'export -failure' ) ;
401+ $messageDiv . addClass ( 'transfer -failure' ) ;
403402 }
404403 } ,
405404 error : function ( a , b , c ) {
@@ -408,6 +407,76 @@ $(document).on('turbolinks:load', function () {
408407 } ) ;
409408 } ;
410409
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">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+ }
411480 var overrideTextareaTabBehavior = function ( ) {
412481 $ ( '.mb-3 textarea[name$="[content]"]' ) . on ( 'keydown' , function ( event ) {
413482 if ( event . which === TAB_KEY_CODE ) {
@@ -463,6 +532,7 @@ $(document).on('turbolinks:load', function () {
463532 if ( $ ( 'table:not(#tags-table)' ) . isPresent ( ) ) {
464533 enableBatchUpdate ( ) ;
465534 observeExportButtons ( ) ;
535+ observeImportButtons ( ) ;
466536 } else if ( $ ( '.edit_exercise, .new_exercise' ) . isPresent ( ) ) {
467537 const form_selector = $ ( 'form' ) ;
468538 execution_environments = form_selector . data ( 'execution-environments' ) ;
@@ -499,4 +569,4 @@ $(document).on('turbolinks:load', function () {
499569 }
500570
501571
502- } ) ;
572+ } ) ;
0 commit comments