Index: branches/RC/core/admin_templates/js/uploader/upload_manager.js =================================================================== diff -u -r10629 -r10640 --- branches/RC/core/admin_templates/js/uploader/upload_manager.js (.../upload_manager.js) (revision 10629) +++ branches/RC/core/admin_templates/js/uploader/upload_manager.js (.../upload_manager.js) (revision 10640) @@ -12,11 +12,13 @@ UploadsManager._nextId = 0; UploadsManager._debugMode = false; UploadsManager._Uploaders = new Object(); +UploadsManager._singleUpload = true; /* ==== Public Attributes ==== */ UploadsManager.useToolbar = true; UploadsManager.formContainerId = ''; UploadsManager.useTransparency = true; +UploadsManager.uploadCancelled = false; /* ==== Private methods ==== */ UploadsManager._nextFlashId = function() { @@ -72,7 +74,11 @@ if (a_toolbar.ButtonExists('select')) { var old_onclick = a_toolbar.Buttons['select'].onClick; a_toolbar.Buttons['select'].onClick = function() { - UploadsManager.UploadAll(function() {old_onclick()}); + UploadsManager.UploadAll( + function() { + old_onclick(); + } + ); } } } @@ -114,7 +120,7 @@ } UploadsManager.StartUpload = function(id) { - this.uploadCancelled = false; + UploadsManager._singleUpload = true; this._Uploaders[id].startUpload(); } @@ -128,7 +134,7 @@ return ; } - this.uploadCancelled = false; + UploadsManager._singleUpload = false; for (var i in this._Uploaders) { // could raise problems, when simultanious uploads from diffrent uploaders are made this._Uploaders[i].startUpload(); @@ -137,33 +143,40 @@ this.OnAllUploaded = onAllUploaded; } -UploadsManager.UploadQueueComplete = function() { - if (UploadsManager.useTransparency) { - Request.setOpacity(100, UploadsManager._getFromContainer()); - } +UploadsManager.UploadQueueComplete = function($uploader) { + var $all_uploaded = true; // all queued files were uploaded + var $all_processed = true; // all queued files were processed (uploaded OR cancelled) - var all_done = true; for (var i in this._Uploaders) { - this._Uploaders[i].div.style.display = 'none'; - all_done == all_done && !this._Uploaders[i].hasQueue(); + var $queue_owner = this._Uploaders[i].id == $uploader.id; + if (UploadsManager._singleUpload && !$queue_owner) { + // count only current uploader when single upload is made + continue; + } + + if ($queue_owner) { + // hide progress bar only of uploader, that completed it's queue + this._Uploaders[i].div.style.display = 'none'; + } + + var $empty_queue = !this._Uploaders[i].hasQueue(); + + $all_uploaded = $all_uploaded && $empty_queue; + $all_processed = $all_processed && ($empty_queue || this._Uploaders[i].uploadCancelled); } - if (all_done && isset(this.OnAllUploaded) && !this.uploadCancelled) { + + if (UploadsManager.useTransparency && $all_processed) { + // remove transparency, when all uploaders are done + Request.setOpacity(100, UploadsManager._getFromContainer()); + } + + if ($all_uploaded && isset(this.OnAllUploaded) && !this.uploadCancelled) { this.OnAllUploaded(); } } UploadsManager.CancelUpload = function(id) { - var $flash = this._Uploaders[id].flash; - - $flash.StopUpload(); - - var $stats = $flash.GetStats(); - while ($stats.files_queued > 0) { - $flash.CancelUpload(); - $stats = $flash.GetStats(); - } - - this.uploadCancelled = true; + this._Uploaders[id].cancelUpload(); } UploadsManager.setDebugMode = function ($enabled) { @@ -291,7 +304,7 @@ case -290: // Upload Stopped - UploadsManager.UploadQueueComplete(); + UploadsManager.UploadQueueComplete(this); return ; break; } Index: branches/RC/core/admin_templates/js/uploader/uploader.js =================================================================== diff -u -r10626 -r10640 --- branches/RC/core/admin_templates/js/uploader/uploader.js (.../uploader.js) (revision 10626) +++ branches/RC/core/admin_templates/js/uploader/uploader.js (.../uploader.js) (revision 10640) @@ -15,6 +15,7 @@ // set params to uploader this._eventQueue = []; + this.uploadCancelled = false; this.params = params; this.files_count = 0; @@ -229,6 +230,8 @@ } Uploader.prototype.startUpload = function() { + UploadsManager.uploadCancelled = this.uploadCancelled = false; + if (!this.hasQueue()) { return; } @@ -271,6 +274,18 @@ this.flash.StartUpload(); } +Uploader.prototype.cancelUpload = function() { + this.flash.StopUpload(); + + var $stats = this.flash.GetStats(); + while ($stats.files_queued > 0) { + this.flash.CancelUpload(); + $stats = this.flash.GetStats(); + } + + UploadsManager.uploadCancelled = this.uploadCancelled = true; +} + Uploader.prototype.UploadFileStart = function(file) { this.filename.innerHTML = file.name; @@ -312,9 +327,13 @@ var $stats = this.flash.GetStats(); if ($stats.files_queued > 0 && !UploadsManager.uploadCancelled) { this.flash.StartUpload(); - } else if (!UploadsManager.uploadCancelled) { - // all files in queue are uploaded - UploadsManager.UploadQueueComplete(); + } else { + // all files in queue are uploaded OR upload was cancelled globally + if (UploadsManager.uploadCancelled) { + // when upload was cancelled globally -> cancel it for any other uploader + this.cancelUpload(); + } + UploadsManager.UploadQueueComplete(this); } }