@@ -28,19 +28,19 @@ $(function () {
2828 position : 'relative' ,
2929 } ) ;
3030
31- const upload_overlay = $ ( '<div>' )
31+ const uploadOverlay = $ ( '<div>' )
3232 . css ( {
3333 display : 'none' ,
3434 position : 'absolute' ,
3535 top : 0 ,
3636 left : 0 ,
37- width : '92 %' ,
37+ width : '97 %' ,
3838 height : '100%' ,
3939 'background-color' : 'rgba(0, 0, 0, 0.2)' ,
4040 'z-index' : 1000 ,
4141 'text-align' : 'center' ,
4242 border : '10px dashed #000' ,
43- padding : '100px 20px 0px 20px' ,
43+ padding : '30px 20px 0px 20px' ,
4444 'font-size' : '250%' ,
4545 'box-sizing' : 'border-box' ,
4646 } )
@@ -57,7 +57,7 @@ $(function () {
5757 if ( markdownToggle . prop ( 'checked' ) ) {
5858 const dt = e . originalEvent . dataTransfer ;
5959 if ( dt . types . includes ( 'Files' ) ) {
60- upload_overlay . stop ( ) . fadeIn ( 150 ) ;
60+ uploadOverlay . stop ( ) . fadeIn ( 150 ) ;
6161 }
6262 }
6363 } ,
@@ -87,13 +87,76 @@ $(function () {
8787 insertAtCursor ( description [ 0 ] , `` ) ;
8888 } ) ;
8989 }
90- upload_overlay . stop ( ) . fadeOut ( 150 ) ;
90+ uploadOverlay . stop ( ) . fadeOut ( 150 ) ;
9191 }
9292 } ,
9393 } ) ;
9494
95- upload_overlay . on ( 'dragleave' , function ( ) {
96- upload_overlay . stop ( ) . fadeOut ( 150 ) ;
95+ uploadOverlay . on ( 'dragleave' , function ( ) {
96+ uploadOverlay . stop ( ) . fadeOut ( 150 ) ;
97+ } ) ;
98+
99+ // This is basically a copy-paste of the above code, but for the quiz description
100+ // I'm not sure how to refactor this to completely avoid code duplication, but I've made an attempt
101+ const quizMarkdownToggle = $ ( '#id_quiz_description_markdown' ) ;
102+ const quizDescription = $ ( '#id_quiz_description' ) ;
103+ const quizDescriptionParent = quizDescription . parent ( ) ;
104+
105+ quizDescriptionParent . css ( {
106+ position : 'relative' ,
107+ } ) ;
108+
109+ const quizUploadOverlay = uploadOverlay
110+ . clone ( )
111+ . appendTo ( quizDescriptionParent ) ;
112+
113+ quizDescriptionParent . on ( {
114+ dragover : function ( e ) {
115+ if ( quizMarkdownToggle . prop ( 'checked' ) ) {
116+ e . preventDefault ( ) ;
117+ }
118+ } ,
119+ dragenter : function ( e ) {
120+ if ( quizMarkdownToggle . prop ( 'checked' ) ) {
121+ const dt = e . originalEvent . dataTransfer ;
122+ if ( dt . types . includes ( 'Files' ) ) {
123+ quizUploadOverlay . stop ( ) . fadeIn ( 150 ) ;
124+ }
125+ }
126+ } ,
127+ drop : function ( e ) {
128+ if ( quizMarkdownToggle . prop ( 'checked' ) ) {
129+ const dt = e . originalEvent . dataTransfer ;
130+ e . preventDefault ( ) ;
131+ if ( dt && dt . files . length ) {
132+ if ( dt . files . length != 1 ) {
133+ alert ( 'Please only upload one file at a time.' ) ;
134+ return ;
135+ }
136+
137+ let data = new FormData ( ) ;
138+ data . append ( 'key' , IMGBB_API_KEY ) ;
139+ data . append ( 'image' , dt . files [ 0 ] ) ;
140+
141+ $ . ajax ( {
142+ url : 'https://api.imgbb.com/1/upload' ,
143+ method : 'POST' ,
144+ data : data ,
145+ processData : false ,
146+ contentType : false ,
147+ } ) . done ( function ( data ) {
148+ const name = data . data . title ;
149+ const url = data . data . url ;
150+ insertAtCursor ( quizDescription [ 0 ] , `` ) ;
151+ } ) ;
152+ }
153+ quizUploadOverlay . stop ( ) . fadeOut ( 150 ) ;
154+ }
155+ } ,
156+ } ) ;
157+
158+ quizUploadOverlay . on ( 'dragleave' , function ( ) {
159+ quizUploadOverlay . stop ( ) . fadeOut ( 150 ) ;
97160 } ) ;
98161 }
99162} ) ;
0 commit comments