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) ->