@@ -4,7 +4,11 @@ function ucFirst(str) {
4
4
return str [ 0 ] . toUpperCase ( ) + str . slice ( 1 ) ;
5
5
}
6
6
7
- let mediaScanUrl = 'scan.php' ;
7
+ if ( typeof mediaScanUrl === "undefined" ) {
8
+ var mediaPath = "/media/" ;
9
+ var mediaScanUrl = "scan.php" ;
10
+ var uploadUrl = "upload.php" ;
11
+ }
8
12
9
13
class MediaModal {
10
14
constructor ( modal = true )
@@ -117,29 +121,41 @@ class MediaModal {
117
121
this . filemanager = null ;
118
122
this . breadcrumbs = null ;
119
123
this . fileList = null ;
120
- this . mediaPath = "/public/media/" ;
124
+ this . mediaPath = mediaPath ;
121
125
this . type = "single" ;
126
+ this . container = document . getElementById ( "MediaModal" ) ;
127
+ }
128
+
129
+ getResponse ( response ) {
130
+ return this . response ;
131
+ }
132
+
133
+ setResponse ( response ) {
134
+ this . response = response ;
135
+ this . currentPath = '' ,
136
+ this . breadcrumbsUrls = [ ] ;
122
137
}
123
138
124
139
addModalHtml ( ) {
125
140
if ( this . isModal ) document . body . append ( generateElements ( this . modalHtml ) [ 0 ] ) ;
126
- document . querySelector ( "#MediaModal .save-btn" ) . addEventListener ( "click" , ( ) => this . save ( ) ) ;
141
+ this . container = document . getElementById ( "MediaModal" ) ;
142
+ this . container . querySelector ( ".save-btn" ) . addEventListener ( "click" , ( ) => this . save ( ) ) ;
127
143
}
128
144
129
145
showUploadLoading ( ) {
130
- document . querySelector ( "#MediaModal .upload-collapse .status" ) . innerHTML = `
146
+ this . container . querySelector ( ".upload-collapse .status" ) . innerHTML = `
131
147
<div class="spinner-border" style="width: 5rem; height: 5rem;margin: 5rem auto; display:block" role="status">
132
148
<span class="visually-hidden">Loading...</span>
133
149
</div>` ;
134
150
}
135
151
136
152
hideUploadLoading ( ) {
137
- document . querySelector ( "#MediaModal .upload-collapse .status" ) . innerHTML = '' ;
153
+ this . container . querySelector ( ".upload-collapse .status" ) . innerHTML = '' ;
138
154
}
139
155
140
156
save ( ) {
141
157
142
- let file = document . querySelector ( "#MediaModal .files input:checked" ) . value ?? false ;
158
+ let file = this . container . querySelector ( ".files input:checked" ) . value ?? false ;
143
159
let src = file ;
144
160
145
161
if ( ! file ) return ;
@@ -164,7 +180,7 @@ class MediaModal {
164
180
//$(this.targetInput).val(file).trigger("change");
165
181
}
166
182
167
- let modal = bootstrap . Modal . getOrCreateInstance ( document . getElementById ( 'MediaModal' ) ) ;
183
+ let modal = bootstrap . Modal . getOrCreateInstance ( this . container ) ;
168
184
if ( this . isModal ) modal . hide ( ) ;
169
185
}
170
186
@@ -176,8 +192,8 @@ class MediaModal {
176
192
this . initGallery ( ) ;
177
193
this . isInit = true ;
178
194
179
- document . querySelector ( ".filemanager input[type=file]" ) . addEventListener ( "change" , this . onUpload ) ;
180
- document . querySelector ( ".filemanager" ) . addEventListener ( "click" , function ( e ) {
195
+ this . container . querySelector ( ".filemanager input[type=file]" ) . addEventListener ( "change" , this . onUpload ) ;
196
+ this . container . querySelector ( ".filemanager" ) . addEventListener ( "click" , function ( e ) {
181
197
let element = e . target . closest ( ".btn-delete" ) ;
182
198
if ( element ) {
183
199
self . deleteFile ( element ) ;
@@ -212,38 +228,41 @@ class MediaModal {
212
228
this . callback = callback ;
213
229
this . init ( ) ;
214
230
215
- let modal = bootstrap . Modal . getOrCreateInstance ( document . getElementById ( 'MediaModal' ) ) ;
231
+ let modal = bootstrap . Modal . getOrCreateInstance ( this . container ) ;
216
232
if ( this . isModal ) modal . show ( ) ;
217
233
}
218
234
219
235
220
236
initGallery ( ) {
221
- this . filemanager = document . querySelector ( '.filemanager' ) ,
222
- this . breadcrumbs = document . querySelector ( '.breadcrumbs' ) ,
237
+ this . filemanager = this . container . querySelector ( '.filemanager' ) ,
238
+ this . breadcrumbs = this . container . querySelector ( '.breadcrumbs' ) ,
223
239
this . fileList = this . filemanager . querySelector ( '.data' ) ;
224
240
let _this = this ;
225
241
226
242
// Start by fetching the file data from scan.php with an AJAX request
227
- fetch ( mediaScanUrl )
228
- . then ( ( response ) => {
229
- if ( ! response . ok ) { throw new Error ( response ) }
230
- return response . json ( ) ;
231
- } )
232
- . then ( ( data ) => {
233
- _this . response = [ data ] ,
234
- _this . currentPath = '' ,
235
- _this . breadcrumbsUrls = [ ] ;
236
-
237
- let folders = [ ] ,
238
- files = [ ] ;
239
-
240
- window . dispatchEvent ( new HashChangeEvent ( "hashchange" ) ) ;
241
- } )
242
- . catch ( error => {
243
- console . log ( error . statusText ) ;
244
- displayToast ( "bg-danger" , "Error" , "Error loading media!" ) ;
245
- } ) ;
246
-
243
+ if ( ! this . response . length ) { //if response set by a plugin ignore fetch
244
+ fetch ( mediaScanUrl )
245
+ . then ( ( response ) => {
246
+ if ( ! response . ok ) { throw new Error ( response ) }
247
+ return response . json ( ) ;
248
+ } )
249
+ . then ( ( data ) => {
250
+ _this . response = [ data ] ,
251
+ _this . currentPath = '' ,
252
+ _this . breadcrumbsUrls = [ ] ;
253
+
254
+ let folders = [ ] ,
255
+ files = [ ] ;
256
+
257
+ window . dispatchEvent ( new HashChangeEvent ( "hashchange" ) ) ;
258
+ } )
259
+ . catch ( error => {
260
+ console . log ( error . statusText ) ;
261
+ displayToast ( "bg-danger" , "Error" , "Error loading media!" ) ;
262
+ } ) ;
263
+ } else {
264
+ this . goto ( "" ) ;
265
+ }
247
266
// This event listener monitors changes on the URL. We use it to
248
267
// capture back/forward navigation in the browser.
249
268
@@ -430,9 +449,9 @@ class MediaModal {
430
449
// if there is no hash
431
450
432
451
else {
433
- this . currentPath = this . response [ 0 ] . path ;
434
- this . breadcrumbsUrls . push ( this . response [ 0 ] . path ) ;
435
- this . render ( this . searchByPath ( this . response [ 0 ] . path ) ) ;
452
+ this . currentPath = this . response [ 0 ] ? .path ?? "" ;
453
+ this . breadcrumbsUrls . push ( this . currentPath ) ;
454
+ this . render ( this . searchByPath ( this . currentPath ) ) ;
436
455
}
437
456
}
438
457
}
522
541
formData . append ( "mediaPath" , Vvveb . MediaModal . mediaPath + Vvveb . MediaModal . currentPath ) ;
523
542
formData . append ( "onlyFilename" , true ) ;
524
543
525
-
526
- fetch ( 'upload.php' , { method : "POST" , body : formData } )
544
+ fetch ( uploadUrl , { method : "POST" , body : formData } )
527
545
. then ( ( response ) => {
528
- console . log ( response ) ;
529
- if ( ! response . ok ) { throw new Error ( response ) }
546
+ if ( ! response . ok ) {
547
+ return Promise . resolve ( response . text ( ) ) . then ( ( responseInText ) => {
548
+ return Promise . reject ( [ response , responseInText ] ) ;
549
+ } ) ;
550
+ }
551
+ //if (!response.ok) { throw new Error(response) }
530
552
return response . text ( )
531
553
} )
532
554
. then ( ( data ) => {
541
563
542
564
Vvveb . MediaModal . hideUploadLoading ( ) ;
543
565
} )
544
- . catch ( error => {
545
- console . log ( error ) ;
566
+ . catch ( ( error ) => {
567
+ let [ response , responseInText ] = error ;
568
+ let message = responseInText ?? error . statusText ?? "Error uploading!" ;
546
569
Vvveb . MediaModal . hideUploadLoading ( ) ;
547
- displayToast ( "bg-danger" , "Error" , "Error uploading!" ) ;
570
+ displayToast ( "bg-danger" , "Error" , message . substr ( 0 , 200 ) ) ;
571
+ if ( response . text && ! response . bodyUsed ) {
572
+ response . text ( ) . then ( errorMessage => {
573
+ let message = errorMessage . substr ( 0 , 200 ) ;
574
+ console . log ( message ) ;
575
+ displayToast ( "bg-danger" , "Error" , message ) ;
576
+ } ) ;
577
+ }
548
578
} ) ;
549
579
}
550
580
}
554
584
let file = parent . querySelector ( 'input[type ="hidden"]' ) . value ;
555
585
if ( confirm ( `Are you sure you want to delete "${ file } "template?` ) ) {
556
586
557
- fetch ( deleteUrl , { method : "POST" , body : { file} } )
587
+ fetch ( deleteUrl , { method : "POST" , body : new URLSearchParams ( { file} ) } )
558
588
. then ( ( response ) => {
559
- if ( ! response . ok ) { throw new Error ( response ) }
560
- return response . text ( )
589
+ if ( ! response . ok ) { return Promise . reject ( response ) ; }
590
+ return response . text ( ) ;
561
591
} )
562
592
. then ( ( data ) => {
563
593
let bg = "bg-success" ;
564
594
if ( data . success ) {
565
595
} else {
566
596
//bg = "bg-danger";
567
597
}
568
-
569
- document . querySelectorAll ( "#top-toast .toast-body" ) . html ( data )
570
- document . querySelectorAll ( "#top-toast .toast-header" ) . classList . remove ( [ "bg-danger" , "bg-success" ] ) . classList . add ( bg ) ;
571
- document . querySelectorAll ( "#top-toast .toast" ) . classList . add ( "show" ) ;
572
- delay ( ( ) => document . querySelectorAll ( "#top-toast .toast" ) . classList . remove ( "show" ) , 5000 ) ;
598
+
599
+ displayToast ( bg , "Delete" , data . message ?? data ) ;
573
600
574
601
parent . remove ( ) ;
575
602
} )
576
603
. catch ( error => {
577
604
console . log ( error ) ;
578
- displayToast ( "bg-danger" , "Error" , "Error deleting file!" ) ;
605
+ let message = error . statusText ?? "Error deleting file!" ;
606
+ displayToast ( "bg-danger" , "Error" , message ) ;
607
+ error . text ( ) . then ( errorMessage => {
608
+ let message = errorMessage . substr ( 0 , 200 ) ;
609
+ displayToast ( "bg-danger" , "Error" , message ) ;
610
+ } )
579
611
} ) ;
580
612
}
581
613
}
599
631
//bg = "bg-danger";
600
632
}
601
633
602
- document . querySelectorAll ( "#top-toast .toast-body" ) . html ( data )
603
- document . querySelectorAll ( "#top-toast .toast-header" ) . classList . remove ( [ "bg-danger" , "bg-success" ] ) . classList . add ( bg ) ;
604
- document . querySelectorAll ( "#top-toast .toast" ) . classList . add ( "show" ) ;
605
- delay ( ( ) => document . querySelectorAll ( "#top-toast .toast" ) . classList . remove ( "show" ) , 5000 ) ;
634
+ displayToast ( bg , "Save" , data . message ?? data ) ;
606
635
} )
607
636
. catch ( error => {
608
637
console . log ( error ) ;
0 commit comments