Index: branches/5.2.x/core/admin_templates/js/uploader/uploader.js =================================================================== diff -u -N -r15347 -r15446 --- branches/5.2.x/core/admin_templates/js/uploader/uploader.js (.../uploader.js) (revision 15347) +++ branches/5.2.x/core/admin_templates/js/uploader/uploader.js (.../uploader.js) (revision 15446) @@ -45,7 +45,10 @@ allowedFiletypesDescription : 'All Files', allowedFilesize : 0, // Default zero means "unlimited" multiple : 0, + field: '', thumb_format: '', + json: '', + previewURL: '', fileQueueLimit : 0, buttonImageURL : '', buttonWidth : 1, @@ -80,24 +83,35 @@ } Uploader.prototype._prepareFiles = function() { - var ids = ''; - var names = ''; + var $files_json = [], $raw_file_info, $file_info; + // process uploaded files for (var f = 0; f < this.files.length; f++) { - if (isset(this.files[f].uploaded) && !isset(this.files[f].temp)) { - continue; - } + $raw_file_info = this.files[f]; - ids += this.files[f].id + '|' - names += this.files[f].name + '|' + $file_info = { + id: $raw_file_info.id, + name: $raw_file_info.name, + size: $raw_file_info.size, + deleted: 0, + temp: $raw_file_info.temp, + order: $raw_file_info.order + }; + + $files_json.push(JSON.stringify($file_info)); } - ids = ids.replace(/\|$/, '', ids); - names = names.replace(/\|$/, '', names); + // process deleted files; + for (var $i = 0; $i < this.deleted.length; $i++) { + $file_info = { + name: this.deleted[$i], + deleted: 1 + }; - document.getElementById(this.id+'[tmp_ids]').value = ids; - document.getElementById(this.id+'[tmp_names]').value = names; - document.getElementById(this.id+'[tmp_deleted]').value = this.deleted.join('|'); + $files_json.push(JSON.stringify($file_info)); + } + + document.getElementById(this.id+'[json]').value = $files_json.join('|'); } Uploader.prototype._formatSize = function (bytes) { @@ -178,29 +192,40 @@ } ) - if (this.params.urls != '') { - var urls = this.params.urls.split('|'); - var names = this.params.names.split('|'); - var sizes = this.params.sizes.split('|'); + if (this.params.json != '') { + var $json_decoded = this.params.json.split('|'), $file, $preview_url; - for (var i = 0; i < urls.length; i++) { - var a_file = { - id : 'uploaded_' + crc32(names[i]), - name : names[i], - url : urls[i], - size: sizes[i], - uploaded : 1, - progress: 100 - }; + for (var $i = 0; $i < $json_decoded.length; $i++) { + $file = JSON.parse($json_decoded[$i]); - this.files.push(a_file); + if ( $file.deleted ) { + this.deleted.push($file.name); + continue; + } + + $file.url = this.getUrl($file, 'previewURL'); + $file.uploaded = 1; + $file.progress = 100; + + this.files.push($file); this.files_count++; } this.updateInfo(); } } +Uploader.prototype.getUrl = function($file, $param_name) { + var $url = this.params[$param_name]; + + $url = $url.replace('#TMP#', $file.temp); + $url = $url.replace('#ID#', $file.id); + $url = $url.replace('#FILE#', encodeURIComponent($file.name)); + $url = $url.replace('#FIELD#', this.params.field); + + return $url; +} + Uploader.prototype.enableUploadButton = function() { var $me = this; @@ -326,7 +351,7 @@ $('.delete-file-btn', $ret).click( function ($e) { - $(this).attr('checked', UploadsManager.DeleteFile($me.id, $file.name) ? '' : 'checked'); + $(this).attr('checked', UploadsManager.DeleteFile($me.id, $file) ? '' : 'checked'); } ); @@ -354,17 +379,15 @@ return $ret; } -Uploader.prototype.getSortedFiles = function($ordered_queue) { - var $me = this; +Uploader.prototype.sortFiles = function($ordered_queue) { + var $file_id, $file_index; - var $ret = $.map($me.files, function ($elem, $index) { - var $file_id = $ordered_queue[$index].replace(/_queue_row$/, ''), - $file_index = $me.getFileIndex({id: $file_id}); + for (var $i = 0; $i < $ordered_queue.length; $i++) { + $file_id = $ordered_queue[$i].replace(/_queue_row$/, ''); + $file_index = this.getFileIndex({id: $file_id}); - return $me.files[$file_index].name; - }); - - return $ret; + this.files[$file_index].order = $i; + } } Uploader.prototype.updateQueueFile = function($file_index, $delete_file) { @@ -414,7 +437,7 @@ $('#' + this.files[$file_index].id + '_progress').html($progress_code); } -Uploader.prototype.removeFile = function (file) { +Uploader.prototype.removeFile = function (file, $mark_deleted) { var count = 0; var n_files = new Array(); @@ -437,8 +460,26 @@ this.files = n_files; this.files_count = count; this.updateInfo(undefined, true); + + if ( $mark_deleted !== undefined && $mark_deleted === true ) { + this.markDeleted(file.id); + } } +Uploader.prototype.markDeleted = function ($file_name) { + if ( !in_array($file_name, this.deleted) ) { + this.deleted.push($file_name); + } +} + +Uploader.prototype.unMarkDeleted = function ($file_name) { + var $file_index = array_search($file_name, this.deleted); + + if ( $file_index !== -1 ) { + this.deleted.splice($file_index, 1); + } +} + Uploader.prototype.hasQueue = function() { for (var f = 0; f < this.files.length; f++) { if (isset(this.files[f].uploaded)) { @@ -509,12 +550,15 @@ // file was uploaded OR file upload was cancelled var $file_index = this.getFileIndex(file); + this.unMarkDeleted(file.name); + 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#', encodeURIComponent(file.name)).replace('#FIELD#', this.params.field); + this.files[$file_index].url = this.getUrl(this.files[$file_index], 'previewURL'); + this.files[$file_index].order = $file_index; this.updateInfo($file_index); }