Index: branches/RC/core/admin_templates/js/uploader.js =================================================================== diff -u -r9337 -r10621 --- branches/RC/core/admin_templates/js/uploader.js (.../uploader.js) (revision 9337) +++ branches/RC/core/admin_templates/js/uploader.js (.../uploader.js) (revision 10621) @@ -1,451 +1,6 @@ -function Uploader(id, params) -{ - this.id = id; - if (params.multiple.length == 0) params.multiple = 1; - this.params = params; - this.files_count = 0; - this.files = new Array(); - this.deleted = new Array() +var $uploader_scripts = [ + '', + '' +]; - this.uploadURL = params.uploadURL; - this.deleteURL = params.deleteURL; -} - -Uploader.prototype.Init = function() -{ - var holder = document.createElement('DIV'); - document.body.appendChild(holder); - - document.getElementById($form_name).style.display = 'block'; - - // moving out progress div to overcome loosing of flash object after setting opacity - this.div = document.getElementById(this.id+'_progress'); - var clone = this.div.cloneNode(true); - this.div.parentNode.removeChild(this.div) - this.div = document.body.appendChild(clone); - this.IconPath = this.params.IconPath ? this.params.IconPath : '../cmseditor/editor/images'; - - this.filename = document.getElementById(this.id+'_progress_filename'); - this.progress = document.getElementById(this.id+'_progress_progress'); - this.elapsed = document.getElementById(this.id+'_progress_elapsed'); - this.remaining = document.getElementById(this.id+'_progress_remaining'); - this.percent = document.getElementById(this.id+'_percent'); - this.done = document.getElementById(this.id+'_done'); - this.total = 0; - this.uploaded = 0; - - this.flash_id = UploadsManager.NextFlashId(); - this.swf = new SWFObject('swfupload.swf', this.flash_id, "0", "0", "8", "#000000"); - this.swf.setAttribute('style', ''); - this.swf.addVariable("uploadScript", ''); - this.swf.addVariable("maxFiles", escape(this.params.multiple)); - this.swf.addVariable("allowedFilesize", escape(this.params.allowedFilesize)); - this.swf.addVariable("allowedFiletypes", escape(this.params.allowedFiletypes)); - this.swf.addVariable("allowedFiletypesDescription", escape(this.params.allowedFiletypesDescription)); - - this.swf.addVariable("uploadFileQueuedCallback", escape('UploadsManager.FileSelected')); - this.swf.addVariable("uploadFileStartCallback", escape('UploadsManager.UploadFileStart')); - this.swf.addVariable("uploadProgressCallback", escape('UploadsManager.UploadProgress')); - this.swf.addVariable("uploadFileCompleteCallback", escape('UploadsManager.UploadFileComplete')); - this.swf.addVariable("uploadFileCancelCallback", escape('UploadsManager.FileCancelled')); - this.swf.addVariable("uploadQueueCompleteCallback", escape('UploadsManager.UploadQueueComplete')); - this.swf.addVariable("uploadFileErrorCallback", escape('UploadsManager.UploadError')); - this.swf.addVariable("autoUpload", escape('false')); -// this.swf.addVariable("flashLoadedCallback", 'flashLoadedCallback'); - - this.swf.addVariable("uploadScriptCallback", escape('UploadsManager.GetUploadScript')); - this.swf.addVariable("uploaderId", escape(this.id)); - this.swf.write(holder); - - this.flash = document.getElementById(this.flash_id); -/* if (this.flash != null) { - if(this.flash.PercentLoaded() == 100) { - alert('done movie: '+this.flash.PercentLoaded()); - } - } - else { - alert('this.flash is null') - }*/ - if (this.params.urls != '') { - var urls = this.params.urls.split('|'); - var names = this.params.names.split('|'); - var sizes = this.params.sizes.split('|'); - for (var i in urls) { - var a_file = { - id : names[i], - name : names[i], - url : urls[i], - size: sizes[i], - uploaded : 1 - } - this.files.push(a_file) - this.files_count++; - } - this.UpdateInfo(); - } -} - -Uploader.prototype.UpdateInfo = function() -{ - var o = ''; - for (var f in this.files) { - this.files[f].name.match(/\.([^.]*)$/); - var ext = RegExp.$1; - var icon = ext.match(/^(ai|avi|bmp|cs|dll|doc|dot|exe|fla|gif|htm|html|jpg|js|mdb|mp3|pdf|ppt|rdp|swf|swt|txt|vsd|xls|xml|zip)$/) ? ext : 'default.icon'; - o += ' '; - if (isset(this.files[f].uploaded)) { - o += ''+this.files[f].name + ' ('+this.FormatSize(this.files[f].size)+') [Delete]
'; - } - else { - o += this.files[f].name + ' ('+this.FormatSize(this.files[f].size)+') [Delete]
'; - } - } - document.getElementById(this.id+'_queueinfo').innerHTML = o; - this.PrepareFiles() -} - -Uploader.prototype.RemoveFile = function(file) -{ - var n_files = new Array(); - var count=0; - this.total=0; - for (var f in this.files) { - 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)) { - this.total += file.size - } - count++; - } - } - this.files = n_files; - this.files_count = count; - this.UpdateInfo(); -} - -Uploader.prototype.GetUploadScript = function(file) -{ -// document.getElementById(this.id+'[my_tmp]').value = file.id; - return this.uploadURL.replace('#ID#', file.id).replace('#FIELD#', this.params.field).replace('#SID#', this.params.flashsid); -} - -Uploader.prototype.PrepareFiles = function() -{ - var ids = ''; - var names = ''; - for (var f in this.files) { - if (isset(this.files[f].uploaded) && !isset(this.files[f].temp)) continue; - ids += this.files[f].id + '|' - names += this.files[f].name + '|' - } - ids = ids.replace(/\|$/, '', ids); - names = names.replace(/\|$/, '', names); - 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('|'); -} - - -Uploader.prototype.HasQueue = function() -{ - for (var f in this.files) { - if (isset(this.files[f].uploaded)) continue; - return true; - } - return false; -} - -Uploader.prototype.StartUpload = function() -{ - if (!this.HasQueue()) return; - - Request.setOpacity(30, UploadsManager.getFromContainer()); - - 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'; - 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 in this.files) { - if (isset(this.files[f].uploaded)) continue; - this.total += this.files[f].size; - } - - document.getElementById(this.flash_id).upload(); -} - -Uploader.prototype.GetMicroTime = function() { - var $now = new Date(); - return Math.round($now.getTime() / 1000); // because miliseconds are returned too -} -Uploader.prototype.GetEstimatedTime = function() { - return Math.ceil((100 - this.ProgressPercent) * this.ProgressTime / this.ProgressPercent); -} - -Uploader.prototype.FormatTime = function ($seconds) { - $seconds = parseInt($seconds); - - var $minutes = Math.floor($seconds / 60); - if ($minutes < 10) $minutes = '0' + $minutes; - $seconds = $seconds % 60; - if ($seconds < 10) $seconds = '0' + $seconds; - - return $minutes + ':' + $seconds; -} - -Uploader.prototype.FormatSize = function (bytes) { - var kb = Math.round(bytes / 1024); - if (kb < 1024) return kb+'Kb'; - var mb = Math.round(kb / 1024 * 100)/100; - return mb+'Mb'; -} - -Uploader.prototype.UploadFileStart = function(file, position, queuelength) -{ - this.filename.innerHTML = file.name; -} - -Uploader.prototype.UploadProgress = function(file, bytesLoaded) -{ - this.cur_file_uploaded = bytesLoaded; - var uploaded = this.uploaded+this.cur_file_uploaded; - this.ProgressTime = this.GetMicroTime() - this.StartTime; - - var speed = 0; - if (this.ProgressTime > 0) { - speed = Math.round(uploaded/this.ProgressTime*100)/100; - } - - 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.elapsed.innerHTML = this.FormatTime(this.ProgressTime ); - this.remaining.innerHTML = this.FormatTime( this.GetEstimatedTime() ); -} - -Uploader.prototype.UploadFileComplete = function(file) -{ - this.uploaded += this.cur_file_uploaded; - for (var f in this.files) { - 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); - } - } - this.UpdateInfo(); -} - - -// MANAGER - - -function UploadsManager() { - // hooking to standard toolbar select button to peform auto-upload when Save is clicked - if (isset(a_toolbar)) { - if (a_toolbar.ButtonExists('select')) { - var old_onclick = a_toolbar.Buttons['select'].onClick; - a_toolbar.Buttons['select'].onClick = function() { - UploadsManager.UploadAll(function() {old_onclick()}); - } - } - } - addLoadEvent(function() {UploadsManager.InitAll()}); -} - -UploadsManager = new UploadsManager(); -UploadsManager.Uploaders = new Object(); -UploadsManager.nextId = 0; -UploadsManager.formContainerId = ''; - -UploadsManager.NextFlashId = function() -{ - this.nextId++; - return 'uploaderflash'+this.nextId; -} - -UploadsManager.AddUploader = function(id, params ) -{ - this.Uploaders[id] = new Uploader(id, params); -} - -UploadsManager.getFromContainer = function() -{ - if (UploadsManager.formContainerId) { - return document.getElementById(UploadsManager.formContainerId); - } - - return Form.Div; -} - -UploadsManager.InitAll = function() -{ - for (var i in this.Uploaders) { - this.Uploaders[i].Init(); - } -} - -UploadsManager.FileSelected = function(file) -{ - var upl = this.Uploaders[file.uploader_id] - if (upl.files_count >= upl.params.multiple) { - if (upl.params.multiple > 1) { - alert('too many files'); - upl.flash.cancelFile(file.id); - } - else { - upl.files_count++; - upl.files.push(file); - upl.total += file.size; - if (upl.files[0].uploaded) { - UploadsManager.DeleteFile(file.uploader_id, upl.files[0].name, true); - } - else { - upl.flash.cancelFile(upl.files[0].id); - } - } - } - else { - upl.files_count++; - upl.files.push(file); - upl.total += file.size; - } - upl.UpdateInfo(); -} - -UploadsManager.FileCancelled = function(file) -{ - this.Uploaders[file.uploader_id].RemoveFile(file); -} - -UploadsManager.GetUploadScript = function(file) -{ - return this.Uploaders[file.uploader_id].GetUploadScript(file); -} - -UploadsManager.UploadError = function(errno, file, msg) -{ - this.Uploaders[file.uploader_id].RemoveFile(file); - - if (errno == -10) { - switch (msg.toString()) { - case '403': - msg = 'You don\'t have permission to upload'; - break; - case '500': - msg = 'Write permissions not set on the server, please contact server administrator'; - break; - } - } - alert('Error: '+msg+'\nOccured on file '+file.name); -} - -UploadsManager.DeleteFile = function(mov, fname, confirmed) -{ - if (!confirmed && !confirm('Are you sure you want to delete this file?')) return; - Request.makeRequest( - this.Uploaders[mov].deleteURL.replace('#FILE#', fname).replace('#FIELD#', this.Uploaders[mov].params.field), - false, '', - function(req, fname, upl) { - upl.RemoveFile({id:fname}) - upl.deleted.push(fname); - upl.UpdateInfo(); - }, - function(req, fname, upl) {alert('Error while deleting file')}, - fname, this.Uploaders[mov] - ); -} - - -UploadsManager.Browse = function(id) -{ - this.Uploaders[id].flash.browse() -} - -UploadsManager.StartUpload = function(id) -{ - this.uploadCancelled = false; - this.Uploaders[id].StartUpload(); -} - -UploadsManager.CancelFile = function(id, file_id) -{ - this.Uploaders[id].flash.cancelFile(file_id) -} - -UploadsManager.UploadAll = function(onAllUploaded) -{ - if (!this.HasQueue()) { - onAllUploaded(); - return; - } - this.uploadCancelled = false; - for (var i in this.Uploaders) { - this.Uploaders[i].StartUpload(); - } - this.OnAllUploaded = onAllUploaded; -} - -UploadsManager.UploadFileStart = function(file, position, queuelength) -{ - this.Uploaders[file.uploader_id].UploadFileStart(file, position, queuelength); -} - -UploadsManager.UploadProgress = function(file, bytesLoaded) -{ - this.Uploaders[file.uploader_id].UploadProgress(file, bytesLoaded); -} - -UploadsManager.UploadFileComplete = function(file) -{ - this.Uploaders[file.uploader_id].UploadFileComplete(file); -} - -UploadsManager.HasQueue = function() -{ - var has_queue = false; - for (var i in this.Uploaders) { - var tmp = this.Uploaders[i].HasQueue() - has_queue = has_queue || tmp; - } - return has_queue; -} - -UploadsManager.UploadQueueComplete = function(file) -{ - Request.setOpacity(100, UploadsManager.getFromContainer()); - 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(); - } - if (all_done && isset(this.OnAllUploaded) && !this.uploadCancelled) { - this.OnAllUploaded(); - } -} - -UploadsManager.CancelUpload = function(id) -{ - this.Uploaders[id].flash.cancelQueue(); - this.uploadCancelled = true; -} \ No newline at end of file +document.write($uploader_scripts.join('')); \ No newline at end of file