';
this._prepareFiles();
+}
- // sync position of all uploaders below current, because file queue height change will not affect their positions
- UploadsManager.iterate('syncBrowseButton', 'timeout:0');
+Uploader.prototype.updateProgressOnly = function ($file_index) {
+ var $progress_code = '
';
+
+ $('#' + this.files[$file_index].id + '_progress').html($progress_code);
}
Uploader.prototype.removeFile = function (file) {
- var n_files = new Array();
var count = 0;
- var $new_total = 0;
+ var n_files = new Array();
+ var $to_delete = [];
+
for (var f = 0; f < this.files.length; f++) {
if (this.files[f].id != file.id && this.files[f].name != file.id) {
n_files.push(this.files[f]);
- if (!isset(this.files[f].uploaded)) {
- $new_total += file.size;
- }
count++;
}
+ else {
+ $to_delete.push(f);
+ }
}
- if (this.StartTime == 0) {
- // don't update total during upload, because that breaks progress bar
- this.total = $new_total;
+ for (var $i = 0; $i < $to_delete.length; $i++) {
+ this.updateQueueFile($to_delete[$i], true);
}
this.files = n_files;
this.files_count = count;
- this.updateInfo();
+ this.updateInfo(undefined, true);
}
Uploader.prototype.hasQueue = function() {
@@ -405,121 +421,78 @@
}
Uploader.prototype.startUpload = function() {
- UploadsManager.uploadCancelled = this.uploadCancelled = false;
+ this.uploadCancelled = false;
if (!this.hasQueue()) {
return;
}
- if (UploadsManager.useTransparency) {
- Request.setOpacity(30, UploadsManager._getFormContainer());
- }
-
- if (!document.all) {
- var $winW = window.innerWidth;
- var $winH = window.innerHeight;
- }
- else {
- var $winW = window.document.body.offsetWidth;
- var $winH = window.document.body.offsetHeight;
- }
-
- var left = Math.round(($winW - 350)/2)+'px';
- var top = Math.round(($winH - 110)/2)+'px';
-
- this.div.style.top = top;
- this.div.style.left = left;
- this.div.style.display = 'block';
-
- if (UploadsManager.useTransparency) {
- Request.setOpacity(100, this.div);
- }
-
- this.StartTime = this._getMicroTime();
- this.ProgressPercent = 0; // progress percent
- this.ProgressTime = new Array();
-
- this.uploaded = 0;
- this.total = 0;
- for (var f = 0; f < this.files.length; f++) {
- if (isset(this.files[f].uploaded)) {
- // get total bytes of non-uploaded files
- continue;
- }
- this.total += this.files[f].size;
- }
-
this.callFlash('StartUpload');
}
Uploader.prototype.cancelUpload = function() {
this.callFlash('StopUpload');
-
var $stats = this.callFlash('GetStats');
+
while ($stats.files_queued > 0) {
this.callFlash('CancelUpload');
-
$stats = this.callFlash('GetStats');
}
- UploadsManager.uploadCancelled = this.uploadCancelled = true;
+ this.uploadCancelled = true;
}
Uploader.prototype.UploadFileStart = function(file) {
- this.filename.innerHTML = file.name;
+ var $file_index = this.getFileIndex(file);
+ this.files[$file_index].progress = 0;
+ this.updateProgressOnly($file_index);
this.callFlash('AddFileParam', [file.id, 'field', this.params.field]);
this.callFlash('AddFileParam', [file.id, 'id', file.id]);
this.callFlash('AddFileParam', [file.id, 'flashsid', this.params.flashsid]);
- UploadsManager.iterate('disableBrowse', true); // disable all "Browse" buttons (not just for current uploader)!
-
// we can prevent user from adding any files here :)
this.callFlash('ReturnUploadStart', [true]);
}
Uploader.prototype.UploadProgress = function(file, bytesLoaded, bytesTotal) {
- this.cur_file_uploaded = bytesLoaded;
- var uploaded = this.uploaded + this.cur_file_uploaded;
- this.ProgressTime = this._getMicroTime() - this.StartTime;
+ var $file_index = this.getFileIndex(file);
+ this.files[$file_index].progress = Math.round(bytesLoaded / bytesTotal * 100);
+ this.updateProgressOnly($file_index);
+}
- var speed = 0;
- if (this.ProgressTime > 0) {
- speed = Math.round(uploaded / this.ProgressTime * 100) / 100;
+Uploader.prototype.UploadFileComplete = function(file) {
+ var $file_index = this.getFileIndex(file);
+
+ if ($file_index !== false) {
+ // in case if file upload was cancelled, then no info here
+ this.files[$file_index].uploaded = 1;
+ this.files[$file_index].progress = 100;
+ this.files[$file_index].temp = 1;
+ this.files[$file_index].url = this.params.tmp_url.replace('#ID#', file.id).replace('#FILE#', file.name).replace('#FIELD#', this.params.field);
}
- this.progress.innerHTML = this._formatSize(uploaded) + ' / ' + this._formatSize(this.total) + ' (' + this._formatSize(speed) + '/s)';
- this.ProgressPercent = Math.round(uploaded / this.total * 100);
- this.done.style.width = this.ProgressPercent + '%';
- this.percent.innerHTML = this.ProgressPercent + '%';
+ this.updateInfo($file_index);
- this.elapsed.innerHTML = this._formatTime(this.ProgressTime );
- this.remaining.innerHTML = this._formatTime( this._getEstimatedTime() );
+ // upload next file in queue
+ var $stats = this.callFlash('GetStats');
+
+ if ($stats.files_queued > 0) {
+ this.callFlash('StartUpload');
+ }
+ else {
+ UploadsManager.UploadQueueComplete(this);
+ }
}
-Uploader.prototype.UploadFileComplete = function(file) {
- this.uploaded += this.cur_file_uploaded;
+Uploader.prototype.getFileIndex = function(file) {
for (var f = 0; f < this.files.length; f++) {
if (this.files[f].id == file.id) {
- this.files[f].uploaded = 1;
- this.files[f].temp = 1;
- this.files[f].url = this.params.tmp_url.replace('#ID#', file.id).replace('#FILE#', file.name).replace('#FIELD#', this.params.field);
+ return f;
}
}
- this.updateInfo();
- // upload next file in queue
- var $stats = this.callFlash('GetStats');
- if ($stats.files_queued > 0 && !UploadsManager.uploadCancelled) {
- this.callFlash('StartUpload');
- } 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);
- }
+ return false;
}
Uploader.prototype.queueEvent = function (function_body) {
@@ -598,32 +571,17 @@
};
Uploader.prototype.onFlashReady = function() {
- this.disableBrowse(false);
- UploadsManager.iterate('syncBrowseButton');
-}
+ var $me = this;
-Uploader.prototype.disableBrowse = function($disabled) {
- if ($disabled === undefined) {
- $disabled = true;
- }
-
this.queueEvent(
function() {
- this.callFlash('SetButtonDisabled', [$disabled]);
+ setTimeout(
+ function () {
+ // enable upload button, when flash is fully loaded
+ $me.callFlash('SetButtonDisabled', [false]);
+ }, 0
+ )
+
}
);
-}
-
-Uploader.prototype._resetCounters = function() {
- this.StartTime = 0; // time, when upload was started
- this.ProgressPercent = 0; // upload progress in percents
- this.ProgressTime = 0; // flash upload process callback times
- this.total = 0; // total bytes to upload (from all queued files)
- this.uploaded = 0; // total uploaded bytes (from all queued files)
-}
-
-Uploader.prototype.finalizeUpload = function() {
- // hide progress bar only of uploader, that completed it's queue
- this.div.style.display = 'none';
- this._resetCounters();
}
\ No newline at end of file