app/assets/javascripts/scrivito_resourcebrowser/uploader.js.coffee in scrivito_resourcebrowser-0.0.4 vs app/assets/javascripts/scrivito_resourcebrowser/uploader.js.coffee in scrivito_resourcebrowser-0.0.5
- old
+ new
@@ -25,21 +25,26 @@
for mime, objClass of @mimeTypeMapping
return objClass if mimeType.match(mime)
undefined
- _processQueue: (queue, createdObjs, promise) ->
+ _processQueue: (queue, createdObjs, failedUploads, promise) ->
file = queue.pop()
if file?
@_createResource(file)
.done (obj) =>
@_updateProgress(file, '100%')
createdObjs.push(obj)
- @_processQueue(queue, createdObjs, promise)
+ @_processQueue(queue, createdObjs, failedUploads, promise)
+ .fail (args) =>
+ @_updateError(file, args.message || "Upload failed. Please check your network connection.")
+ @_updateProgress(file, '0%')
+ failedUploads.push(args)
+ @_processQueue(queue, createdObjs, failedUploads, promise)
else
- return promise.resolve(createdObjs)
+ return promise.resolve(createdObjs, failedUploads)
_addProgressWrapper: () ->
itemsElement = $('.editing-resourcebrowser-items').empty()
$('<div></div>')
@@ -60,21 +65,29 @@
.html(progressBar)
fileName = $('<p></p>')
.html(file.name)
+ error = $('<p></p>')
+ .addClass('editing-resourcebrowser-error')
+
$('<div></div>')
.addClass('editing-resourcebrowser-progress-file')
.append(fileName)
+ .append(error)
.append(progress)
.prependTo $('.editing-resourcebrowser-progress-wrapper')
- file['progressBar'] = progressBar
+ file.progressBar = progressBar
+ file.error = error
_updateProgress: (file, percent) ->
file.progressBar.css('width', percent)
+ _updateError: (file, message) ->
+ file.error.text(message)
+
_onDrop: (event) ->
dataTransfer = event.originalEvent.dataTransfer
unless dataTransfer?
return
@@ -82,23 +95,23 @@
files = dataTransfer.files
if files.length == 0
return
- @onUploadStart(queue)
@_addProgressWrapper()
- promise = $.Deferred()
- .done (data) =>
- @onUploadSuccess(data)
-
queue = for file in files
@_addProgress(file)
file
- @_processQueue(queue, [], promise)
+ @onUploadStart(queue)
+ promise = $.Deferred()
+ .done (createdObjs, failedUploads) =>
+ @onUploadFailure(failedUploads) if failedUploads.length > 0
+ @onUploadSuccess(createdObjs) if createdObjs.length > 0
+ @_processQueue(queue, [], [], promise)
promise
_randomResourceId: ->
hex = Math.floor(Math.random() * Math.pow(16, 8)).toString(16)
@@ -108,22 +121,29 @@
hex
_createResource: (file) ->
objName = file.name.replace(/[^a-z0-9_.$\-]/ig, '-')
path = "_resources/#{@_randomResourceId()}/#{objName}"
+ objClass = @_objClassForMimeType(file.type)
- scrivito.create_obj
- blob: file
- _path: path
- _obj_class: @_objClassForMimeType(file.type)
+ if objClass
+ scrivito.create_obj
+ blob: file
+ _path: path
+ _obj_class: objClass
+ else
+ $.Deferred().reject
+ id: "no_obj_class_for_mime_type"
+ file_name: file.name
+ message: "File type #{file.type} rejected by resource configuration."
init: (@modal) ->
@_initializeBindings()
# Hook for 3rd parties when the upload starts.
onUploadStart: (files) ->
# Hook for 3rd parties when the upload fails.
- onUploadFailure: (error) ->
+ onUploadFailure: (errors) ->
# Hook for 3rd parties when the upload was successful.
onUploadSuccess: (objs) ->