| [0] | 1 | (function($) { |
|---|
| 2 | // We need to create a global SWFUpload object to store instances |
|---|
| 3 | window.SWFUpload = { |
|---|
| 4 | instances: new Array(), |
|---|
| 5 | movieCount: 0, |
|---|
| 6 | version: "2.2.0 Beta 2", |
|---|
| 7 | QUEUE_ERROR: { |
|---|
| 8 | QUEUE_LIMIT_EXCEEDED: -100, |
|---|
| 9 | FILE_EXCEEDS_SIZE_LIMIT: -110, |
|---|
| 10 | ZERO_BYTE_FILE: -120, |
|---|
| 11 | INVALID_FILETYPE: -130 |
|---|
| 12 | }, |
|---|
| 13 | UPLOAD_ERROR: { |
|---|
| 14 | HTTP_ERROR: -200, |
|---|
| 15 | MISSING_UPLOAD_URL: -210, |
|---|
| 16 | IO_ERROR: -220, |
|---|
| 17 | SECURITY_ERROR: -230, |
|---|
| 18 | UPLOAD_LIMIT_EXCEEDED: -240, |
|---|
| 19 | UPLOAD_FAILED: -250, |
|---|
| 20 | SPECIFIED_FILE_ID_NOT_FOUND: -260, |
|---|
| 21 | FILE_VALIDATION_FAILED: -270, |
|---|
| 22 | FILE_CANCELLED: -280, |
|---|
| 23 | UPLOAD_STOPPED: -290 |
|---|
| 24 | }, |
|---|
| 25 | FILE_STATUS: { |
|---|
| 26 | QUEUED: -1, |
|---|
| 27 | IN_PROGRESS: -2, |
|---|
| 28 | ERROR: -3, |
|---|
| 29 | COMPLETE: -4, |
|---|
| 30 | CANCELLED: -5 |
|---|
| 31 | }, |
|---|
| 32 | BUTTON_ACTION: { |
|---|
| 33 | SELECT_FILE: -100, |
|---|
| 34 | SELECT_FILES: -110, |
|---|
| 35 | START_UPLOAD: -120 |
|---|
| 36 | }, |
|---|
| 37 | CURSOR: { |
|---|
| 38 | ARROW: -1, |
|---|
| 39 | HAND: -2 |
|---|
| 40 | }, |
|---|
| 41 | WINDOW_MODE: { |
|---|
| 42 | WINDOW: 'window', |
|---|
| 43 | TRANSPARENT: 'transparent', |
|---|
| 44 | OPAQUE: 'opaque' |
|---|
| 45 | } |
|---|
| 46 | }; |
|---|
| 47 | |
|---|
| 48 | $.uploader = function(settings,callbacks) { |
|---|
| 49 | return new $._uploader(settings,callbacks); |
|---|
| 50 | }; |
|---|
| 51 | |
|---|
| 52 | $._uploader = function(settings,callbacks) { |
|---|
| 53 | var defaults = { |
|---|
| 54 | debug: false, |
|---|
| 55 | upload_url: '', |
|---|
| 56 | flash_movie: '', |
|---|
| 57 | movie_name: null, |
|---|
| 58 | params: null, |
|---|
| 59 | use_query_string: null, |
|---|
| 60 | requeue_on_error: false, |
|---|
| 61 | file_types: '*.*', |
|---|
| 62 | file_types_description: 'All files', |
|---|
| 63 | file_size_limit: 0, |
|---|
| 64 | file_upload_limit: 0, |
|---|
| 65 | file_queue_limit: -1, |
|---|
| 66 | target_element: null |
|---|
| 67 | }; |
|---|
| 68 | this.params = $.extend(defaults,settings); |
|---|
| 69 | |
|---|
| 70 | var default_callbacks = { |
|---|
| 71 | flashReady: function() {}, |
|---|
| 72 | fileDialogComplete: function() {}, |
|---|
| 73 | fileDialogStart: function() {}, |
|---|
| 74 | fileQueued: function() {}, |
|---|
| 75 | fileQueueError: function() {}, |
|---|
| 76 | uploadStart: function() {}, |
|---|
| 77 | uploadProgress: function() {}, |
|---|
| 78 | uploadError: function() {}, |
|---|
| 79 | uploadSuccess: function() {}, |
|---|
| 80 | uploadComplete: function() {}, |
|---|
| 81 | debug: function() {} |
|---|
| 82 | }; |
|---|
| 83 | this.callbacks = $.extend(default_callbacks,callbacks); |
|---|
| 84 | |
|---|
| 85 | return this.build(); |
|---|
| 86 | }; |
|---|
| 87 | |
|---|
| 88 | $._uploader.prototype = { |
|---|
| 89 | log: function(msg) { |
|---|
| 90 | if (!this.params.debug) { return; } |
|---|
| 91 | try { |
|---|
| 92 | console.log(msg); |
|---|
| 93 | } catch(e) {} |
|---|
| 94 | }, |
|---|
| 95 | |
|---|
| 96 | /* Constructor */ |
|---|
| 97 | build: function(settings) { |
|---|
| 98 | if (!this.params.upload_url || !this.params.movie_name) { |
|---|
| 99 | throw('Configuration error. Please make sure you specified movie_name and upload_url options.'); |
|---|
| 100 | } |
|---|
| 101 | |
|---|
| 102 | if ($.browser.opera) { |
|---|
| 103 | return this; |
|---|
| 104 | } |
|---|
| 105 | |
|---|
| 106 | // Get a real bytes size limit (if we want to reuse it somewhere) |
|---|
| 107 | this.params.file_size_limit = this.getFileSizeLimit(this.params.file_size_limit); |
|---|
| 108 | |
|---|
| 109 | // Flash vars |
|---|
| 110 | var fv = new Array(); |
|---|
| 111 | this.addFlashVar(fv,'debugEnabled',this.params.debug); |
|---|
| 112 | this.addFlashVar(fv,'movieName',this.params.movie_name); |
|---|
| 113 | this.addFlashVar(fv,'uploadURL',this.params.upload_url); |
|---|
| 114 | this.addFlashVar(fv,'fileTypes',this.params.file_types); |
|---|
| 115 | this.addFlashVar(fv,'fileTypesDescription',this.params.file_types_description); |
|---|
| 116 | this.addFlashVar(fv,'params',this.params.params); |
|---|
| 117 | this.addFlashVar(fv,'fileSizeLimit',this.params.file_size_limit + 'b'); |
|---|
| 118 | this.addFlashVar(fv,'fileUploadLimit',this.params.file_upload_limit); |
|---|
| 119 | this.addFlashVar(fv,'fileQueueLimit',this.params.file_queue_limit); |
|---|
| 120 | this.addFlashVar(fv,'requeueOnError',this.params.requeue_on_error); |
|---|
| 121 | this.addFlashVar(fv,'buttonImageURL',''); |
|---|
| 122 | this.addFlashVar(fv,'buttonWidth',500); |
|---|
| 123 | this.addFlashVar(fv,'buttonHeight',500); |
|---|
| 124 | this.addFlashVar(fv,'buttonText',''); |
|---|
| 125 | this.addFlashVar(fv,'buttonTextTopPadding',0); |
|---|
| 126 | this.addFlashVar(fv,'buttonTextLeftPadding',0); |
|---|
| 127 | this.addFlashVar(fv,'buttonTextStyle',''); |
|---|
| 128 | this.addFlashVar(fv,'buttonAction',this.params.upload_limit == 1 ? -100 : -110); |
|---|
| 129 | this.addFlashVar(fv,'buttonDisabled',false); |
|---|
| 130 | this.addFlashVar(fv,'buttonCursor',-2); |
|---|
| 131 | this.addFlashVar(fv,'button_window_mode','window'); |
|---|
| 132 | |
|---|
| 133 | // Create SWFUpload Instance |
|---|
| 134 | this.flashBind(); |
|---|
| 135 | |
|---|
| 136 | // Flash object |
|---|
| 137 | var flash = |
|---|
| 138 | '<object id="' + this.params.movie_name + '" data="' + this.params.flash_movie + '" ' + |
|---|
| 139 | 'type="application/x-shockwave-flash" width="10" height="10">' + |
|---|
| 140 | '<param name="movie" value="' + this.params.flash_movie + '" />'+ |
|---|
| 141 | '<param name="wmode" value="transparent" />'+ |
|---|
| 142 | '<param name="menu" value="false" />'+ |
|---|
| 143 | '<param name="allowScriptAccess" value="always" />'+ |
|---|
| 144 | '<param name="flashvars" value="' + fv.join('&') + '" />'+ |
|---|
| 145 | '</object>'; |
|---|
| 146 | |
|---|
| 147 | // Flash container |
|---|
| 148 | this.container = $('<span></span>'); |
|---|
| 149 | if (this.params.target_element == null) { |
|---|
| 150 | this.container.css({ |
|---|
| 151 | display: 'block', |
|---|
| 152 | position: 'absolute', |
|---|
| 153 | left: $(document).scrollLeft()+'px', |
|---|
| 154 | top: $(document).scrollTop()+'px', |
|---|
| 155 | width: '30px', |
|---|
| 156 | height: '30px', |
|---|
| 157 | background: '#f00' |
|---|
| 158 | }); |
|---|
| 159 | |
|---|
| 160 | $('body').append(this.container); |
|---|
| 161 | } else { |
|---|
| 162 | $(this.params.target_element).append(this.container); |
|---|
| 163 | this.container.css({ |
|---|
| 164 | display: 'block', |
|---|
| 165 | position: 'absolute', |
|---|
| 166 | top: 0, |
|---|
| 167 | left: 0, |
|---|
| 168 | zIndex: 1 |
|---|
| 169 | }); |
|---|
| 170 | } |
|---|
| 171 | this.container[0].innerHTML = flash; |
|---|
| 172 | this.movie = document.getElementById(this.params.movie_name); |
|---|
| 173 | |
|---|
| 174 | return this; |
|---|
| 175 | }, |
|---|
| 176 | |
|---|
| 177 | addFlashVar: function(fv,n,v) { |
|---|
| 178 | if (v != null) { |
|---|
| 179 | fv.push(n + '=' + encodeURIComponent(v)); |
|---|
| 180 | } |
|---|
| 181 | }, |
|---|
| 182 | |
|---|
| 183 | // Bind flash events to callbacks.events |
|---|
| 184 | flashBind: function() { |
|---|
| 185 | _this = this; |
|---|
| 186 | var events = { |
|---|
| 187 | flashReady: function() { |
|---|
| 188 | if (window[_this.params.movie_name] == undefined) { |
|---|
| 189 | window[_this.params.movie_name] = _this.movie; |
|---|
| 190 | } |
|---|
| 191 | _this.flashBindEvent('flashReady',arguments); |
|---|
| 192 | }, |
|---|
| 193 | fileDialogComplete: function() { _this.flashBindEvent('fileDialogComplete',arguments); }, |
|---|
| 194 | fileDialogStart: function() { _this.flashBindEvent('fileDialogStart',arguments); }, |
|---|
| 195 | fileQueued: function(file_object) { _this.flashBindEvent('fileQueued',arguments); }, |
|---|
| 196 | fileQueueError: function(file_object,error_code,error_msg) { _this.flashBindEvent('fileQueueError',arguments); }, |
|---|
| 197 | uploadStart: function() { _this.flashBindEvent('uploadStart',arguments); }, |
|---|
| 198 | uploadProgress: function() { _this.flashBindEvent('uploadProgress',arguments); }, |
|---|
| 199 | uploadError: function() { _this.flashBindEvent('uploadError',arguments); }, |
|---|
| 200 | uploadSuccess: function() { _this.flashBindEvent('uploadSuccess',arguments); }, |
|---|
| 201 | uploadComplete: function() { _this.flashBindEvent('uploadComplete',arguments); }, |
|---|
| 202 | debug: function() { _this.flashBindEvent('debug',arguments); } |
|---|
| 203 | }; |
|---|
| 204 | window.SWFUpload.instances[this.params.movie_name] = events; |
|---|
| 205 | window.SWFUpload.movieCount++; |
|---|
| 206 | }, |
|---|
| 207 | |
|---|
| 208 | // Each flash event is called as callbacks.events([arg],...) with this = uploader object |
|---|
| 209 | flashEventQueue: [], |
|---|
| 210 | flashBindEvent: function(evt,a) { |
|---|
| 211 | a = a || new Array(); |
|---|
| 212 | |
|---|
| 213 | var _this = this; |
|---|
| 214 | if ($.isFunction(this.callbacks[evt])) { |
|---|
| 215 | // Queue the event |
|---|
| 216 | this.flashEventQueue.push(function () { |
|---|
| 217 | this.callbacks[evt].apply(this,a); |
|---|
| 218 | }); |
|---|
| 219 | |
|---|
| 220 | // Execute the next queued event |
|---|
| 221 | setTimeout(function () { |
|---|
| 222 | _this.flashExecuteNextEvent(); |
|---|
| 223 | },0); |
|---|
| 224 | } else if (this.callbacks[evt] !== null) { |
|---|
| 225 | throw 'Event handler ' + evt + ' is unknown or is not a function'; |
|---|
| 226 | } |
|---|
| 227 | |
|---|
| 228 | }, |
|---|
| 229 | flashExecuteNextEvent: function() { |
|---|
| 230 | var f = this.flashEventQueue ? this.flashEventQueue.shift() : null; |
|---|
| 231 | if ($.isFunction(f)) { |
|---|
| 232 | f.apply(this); |
|---|
| 233 | } |
|---|
| 234 | }, |
|---|
| 235 | |
|---|
| 236 | destroy: function() { |
|---|
| 237 | try { |
|---|
| 238 | this.StopUpload(); |
|---|
| 239 | $(this.movie).remove(); |
|---|
| 240 | SWFUpload.instances[this.params.movie_name] = null; |
|---|
| 241 | SWFUpload.movieCount--; |
|---|
| 242 | delete SWFUpload.instances[this.movieName]; |
|---|
| 243 | delete window[this.movieName]; |
|---|
| 244 | |
|---|
| 245 | return true; |
|---|
| 246 | } catch(e) { |
|---|
| 247 | return false; |
|---|
| 248 | } |
|---|
| 249 | }, |
|---|
| 250 | |
|---|
| 251 | // Flash uploader functions |
|---|
| 252 | StartUpload: function(file_id) { |
|---|
| 253 | return this.movie.StartUpload(file_id); |
|---|
| 254 | }, |
|---|
| 255 | ReturnUploadStart: function(value) { |
|---|
| 256 | return this.movie.ReturnUploadStart(value); |
|---|
| 257 | }, |
|---|
| 258 | StopUpload: function() { |
|---|
| 259 | return this.movie.StopUpload(); |
|---|
| 260 | }, |
|---|
| 261 | CancelUpload: function(file_id) { |
|---|
| 262 | return this.movie.CancelUpload(file_id); |
|---|
| 263 | }, |
|---|
| 264 | GetStats: function() { |
|---|
| 265 | return this.movie.GetStats(); |
|---|
| 266 | }, |
|---|
| 267 | SetStats: function(stats) { |
|---|
| 268 | return this.movie.SetStats(stats); |
|---|
| 269 | }, |
|---|
| 270 | GetFile: function(file_id) { |
|---|
| 271 | return this.movie.GetFile(file_id); |
|---|
| 272 | }, |
|---|
| 273 | GetFileByIndex: function(file_index) { |
|---|
| 274 | return this.movie.GetFileByIndex(file_index); |
|---|
| 275 | }, |
|---|
| 276 | |
|---|
| 277 | // Size formater, that's better |
|---|
| 278 | getFileSizeLimit: function(size) { |
|---|
| 279 | var value = 0; |
|---|
| 280 | var unit = 'kb'; |
|---|
| 281 | |
|---|
| 282 | size = $.trim(size.toLowerCase()); |
|---|
| 283 | |
|---|
| 284 | var values = size.match(/^\d+/); |
|---|
| 285 | if (values != null && values.length > 0) { |
|---|
| 286 | value = parseInt(values[0]); |
|---|
| 287 | } |
|---|
| 288 | |
|---|
| 289 | var units = size.match(/(b|kb|mb|gb)/); |
|---|
| 290 | if (units != null && units.length > 0) { |
|---|
| 291 | unit = units[0]; |
|---|
| 292 | } |
|---|
| 293 | |
|---|
| 294 | var multiplier = 1024; |
|---|
| 295 | if (unit === "b") { |
|---|
| 296 | multiplier = 1; |
|---|
| 297 | } else if (unit === "mb") { |
|---|
| 298 | multiplier = 1048576; |
|---|
| 299 | } else if (unit === "gb") { |
|---|
| 300 | multiplier = 1073741824; |
|---|
| 301 | } |
|---|
| 302 | |
|---|
| 303 | return value * multiplier; |
|---|
| 304 | } |
|---|
| 305 | }; |
|---|
| 306 | })(jQuery); |
|---|
| 307 | |
|---|
| 308 | (function($) { |
|---|
| 309 | $.fn.candyUpload = function(settings,callbacks) { |
|---|
| 310 | new $._candyUpload(this,settings,callbacks); |
|---|
| 311 | return this; |
|---|
| 312 | }; |
|---|
| 313 | |
|---|
| 314 | $._candyUpload = function(target,settings,callbacks) { |
|---|
| 315 | var defaults = { |
|---|
| 316 | debug: false, |
|---|
| 317 | upload_url: '', |
|---|
| 318 | params: null, |
|---|
| 319 | flash_movie: '', |
|---|
| 320 | file_types: '*.*', |
|---|
| 321 | file_types_description: 'All files', |
|---|
| 322 | file_size_limit: 0, |
|---|
| 323 | file_upload_limit: 0, |
|---|
| 324 | file_queue_limit: -1, |
|---|
| 325 | |
|---|
| 326 | callbacks: {} // Put here all callbacks you want, named as in $.uploader events |
|---|
| 327 | }; |
|---|
| 328 | this.params = $.extend(defaults,settings); |
|---|
| 329 | this.params.movie_name = 'SWFU-' + (window.SWFUpload.instances.length + 1); |
|---|
| 330 | this.target = target; |
|---|
| 331 | |
|---|
| 332 | // Create controls |
|---|
| 333 | this.createControls(); |
|---|
| 334 | |
|---|
| 335 | this.target.hide().after(this.ctrl.block).hide(); |
|---|
| 336 | this.params.target_element = this.ctrl.btn_browse.parent().get(0); |
|---|
| 337 | |
|---|
| 338 | // Uploader init |
|---|
| 339 | var _this = this; |
|---|
| 340 | this.upldr = $.uploader(this.params,{ |
|---|
| 341 | debug: function(msg) { |
|---|
| 342 | $('body').append('<pre class="debug">' + msg + '</pre>'); |
|---|
| 343 | _this.bindEvent('debug',arguments); |
|---|
| 344 | }, |
|---|
| 345 | flashReady: function() { |
|---|
| 346 | _this.initControls(this); |
|---|
| 347 | _this.bindEvent('flashReady',arguments); |
|---|
| 348 | |
|---|
| 349 | this.movie.style.width = _this.ctrl.btn_browse.width()+'px'; |
|---|
| 350 | this.movie.style.height = _this.ctrl.btn_browse.height()+'px'; |
|---|
| 351 | }, |
|---|
| 352 | fileDialogComplete: function(num_ref_files,num_queue_files) { |
|---|
| 353 | _this.bindEvent('fileDialogComplete',arguments); |
|---|
| 354 | }, |
|---|
| 355 | fileDialogStart: function() { |
|---|
| 356 | _this.bindEvent('fileQueued',arguments); |
|---|
| 357 | }, |
|---|
| 358 | fileQueued: function(o) { |
|---|
| 359 | _this.appendFile(this,o); |
|---|
| 360 | _this.refreshControls(this); |
|---|
| 361 | _this.bindEvent('fileQueued',arguments); |
|---|
| 362 | }, |
|---|
| 363 | fileQueueError: function(o,code,msg) { |
|---|
| 364 | var codes = window.SWFUpload.QUEUE_ERROR; |
|---|
| 365 | switch (code) { |
|---|
| 366 | case codes.QUEUE_LIMIT_EXCEEDED: |
|---|
| 367 | _this.queueErrorMsg(_this.locales.limit_exceeded); |
|---|
| 368 | break; |
|---|
| 369 | case codes.FILE_EXCEEDS_SIZE_LIMIT: |
|---|
| 370 | _this.queueErrorMsg(_this.locales.size_limit_exceeded); |
|---|
| 371 | break; |
|---|
| 372 | case codes.ZERO_BYTE_FILE: |
|---|
| 373 | case codes.INVALID_FILETYPE: |
|---|
| 374 | _this.queueErrorMsg(msg); |
|---|
| 375 | break; |
|---|
| 376 | } |
|---|
| 377 | _this.bindEvent('fileQueueError',arguments); |
|---|
| 378 | }, |
|---|
| 379 | uploadStart: function() { |
|---|
| 380 | this.ReturnUploadStart(true); |
|---|
| 381 | _this.bindEvent('uploadStart',arguments); |
|---|
| 382 | }, |
|---|
| 383 | uploadProgress: function(o,bytes,total) { |
|---|
| 384 | _this.fileProgressBar(o.id,bytes,total); |
|---|
| 385 | _this.bindEvent('uploadProgress',arguments); |
|---|
| 386 | }, |
|---|
| 387 | uploadError: function(o,code,msg) { |
|---|
| 388 | var codes = window.SWFUpload.UPLOAD_ERROR; |
|---|
| 389 | switch (code) { |
|---|
| 390 | case codes.FILE_CANCELLED: |
|---|
| 391 | _this.fileErrorMsg(o.id,_this.locales.canceled); |
|---|
| 392 | break; |
|---|
| 393 | case codes.HTTP_ERROR: |
|---|
| 394 | _this.fileErrorMsg(o.id,_this.locales.http_error + ' ' + msg); |
|---|
| 395 | break; |
|---|
| 396 | case codes.MISSING_UPLOAD_URL: |
|---|
| 397 | case codes.IO_ERROR: |
|---|
| 398 | case codes.SECURITY_ERROR: |
|---|
| 399 | case codes.UPLOAD_LIMIT_EXCEEDED: |
|---|
| 400 | case codes.UPLOAD_FAILED: |
|---|
| 401 | case codes.SPECIFIED_FILE_ID_NOT_FOUND: |
|---|
| 402 | case codes.FILE_VALIDATION_FAILED: |
|---|
| 403 | case codes.FILE_CANCELLED: |
|---|
| 404 | case codes.UPLOAD_STOPPED: |
|---|
| 405 | _this.fileErrorMsg(o.id,_this.locales.error + ' ' + msg); |
|---|
| 406 | break; |
|---|
| 407 | } |
|---|
| 408 | _this.refreshControls(this); |
|---|
| 409 | _this.removeFileCancel(o); |
|---|
| 410 | _this.bindEvent('uploadError',arguments); |
|---|
| 411 | }, |
|---|
| 412 | uploadSuccess: function(o,data) { |
|---|
| 413 | _this.fileProgressBar(o.id,1,1); |
|---|
| 414 | _this.refreshControls(this); |
|---|
| 415 | _this.removeFileCancel(o); |
|---|
| 416 | _this.bindEvent('uploadSuccess',arguments); |
|---|
| 417 | }, |
|---|
| 418 | uploadComplete: function(o) { |
|---|
| 419 | // Once completed, start next queued upload |
|---|
| 420 | this.StartUpload(); |
|---|
| 421 | _this.refreshControls(this); |
|---|
| 422 | _this.bindEvent('uploadComplete',arguments); |
|---|
| 423 | } |
|---|
| 424 | }); |
|---|
| 425 | }; |
|---|
| 426 | |
|---|
| 427 | $._candyUpload.prototype = { |
|---|
| 428 | locales: { |
|---|
| 429 | max_file_size: 'Maximum file size allowed:', |
|---|
| 430 | limit_exceeded: 'Limit exceeded.', |
|---|
| 431 | size_limit_exceeded: 'File size exceeds allowed limit.', |
|---|
| 432 | canceled: 'Canceled.', |
|---|
| 433 | http_error: 'HTTP Error:', |
|---|
| 434 | error: 'Error:', |
|---|
| 435 | choose_file: 'Choose file', |
|---|
| 436 | choose_files: 'Choose files', |
|---|
| 437 | cancel: 'Cancel', |
|---|
| 438 | clean: 'Clean', |
|---|
| 439 | upload: 'Upload', |
|---|
| 440 | no_file_in_queue: 'No file in queue.', |
|---|
| 441 | file_in_queue: '1 file in queue.', |
|---|
| 442 | files_in_queue: '%d files in queue.', |
|---|
| 443 | queue_error: 'Queue error:' |
|---|
| 444 | }, |
|---|
| 445 | ctrl: { |
|---|
| 446 | block: $('<div class="cu-ctrl"></div>'), |
|---|
| 447 | files: null |
|---|
| 448 | }, |
|---|
| 449 | |
|---|
| 450 | createControls: function() { |
|---|
| [3] | 451 | this.ctrl.btn_browse = $('<a href="#" class="button"> </a>').click(function() { |
|---|
| [0] | 452 | return false; |
|---|
| 453 | }); |
|---|
| 454 | |
|---|
| [3] | 455 | this.ctrl.btn_cancel = $('<a href="#" class="button">' + this.locales.cancel + '</a>').click(function() { |
|---|
| [0] | 456 | return false; |
|---|
| 457 | }); |
|---|
| 458 | |
|---|
| [3] | 459 | this.ctrl.btn_clean = $('<a href="#" class="button">' + this.locales.clean + '</a>').click(function() { |
|---|
| [0] | 460 | return false; |
|---|
| 461 | }); |
|---|
| 462 | |
|---|
| [3] | 463 | this.ctrl.btn_upload = $('<a href="#" class="button">' + this.locales.upload + '</a>').click(function() { |
|---|
| [0] | 464 | return false; |
|---|
| 465 | }); |
|---|
| 466 | |
|---|
| 467 | this.ctrl.msg = $('<div class="cu-msg">' + this.locales.no_file_in_queue + '</div>').appendTo(this.ctrl.block); |
|---|
| 468 | |
|---|
| 469 | var btn = $('<div class="cu-btn"></div>').appendTo(this.ctrl.block); |
|---|
| 470 | var brw = $('<span class="cu-btn-browse"></span>').append(this.ctrl.btn_browse).appendTo(btn); |
|---|
| 471 | $('<span class="cu-btn-upload"></span>').append(this.ctrl.btn_upload).appendTo(btn).hide(); |
|---|
| 472 | $('<span class="cu-btn-cancel"></span>').append(this.ctrl.btn_cancel).appendTo(btn).hide(); |
|---|
| 473 | $('<span class="cu-btn-clean"></span>').append(this.ctrl.btn_clean).appendTo(btn).hide(); |
|---|
| 474 | |
|---|
| 475 | this.bindEvent('createControls'); |
|---|
| 476 | }, |
|---|
| 477 | |
|---|
| 478 | initControls: function(upldr) { |
|---|
| 479 | if (this.params.file_queue_limit == 1) { |
|---|
| 480 | this.ctrl.btn_browse.text(this.locales.choose_file); |
|---|
| 481 | } else { |
|---|
| 482 | this.ctrl.btn_browse.text(this.locales.choose_files); |
|---|
| 483 | } |
|---|
| 484 | |
|---|
| 485 | var _this = this; |
|---|
| 486 | |
|---|
| 487 | this.ctrl.btn_cancel.click(function() { |
|---|
| 488 | _this.cancelQueue(upldr); |
|---|
| 489 | return false; |
|---|
| 490 | }); |
|---|
| 491 | |
|---|
| 492 | this.ctrl.btn_clean.click(function() { |
|---|
| 493 | _this.cleanQueue(upldr); |
|---|
| 494 | return false; |
|---|
| 495 | }); |
|---|
| 496 | |
|---|
| 497 | this.ctrl.btn_upload.click(function() { |
|---|
| 498 | _this.uploadQueue(upldr); |
|---|
| 499 | return false; |
|---|
| 500 | }); |
|---|
| 501 | |
|---|
| 502 | var size = this.formatSize(upldr.params.file_size_limit); |
|---|
| 503 | $('<div class="cu-maxsize">' + this.locales.max_file_size + ' ' + size + '</div>').appendTo(this.ctrl.block); |
|---|
| 504 | }, |
|---|
| 505 | |
|---|
| 506 | refreshControls: function(upldr) { |
|---|
| 507 | if (!this.ctrl.files || this.ctrl.files.length == 0) { |
|---|
| 508 | return; |
|---|
| 509 | } |
|---|
| 510 | |
|---|
| 511 | var stats = upldr.GetStats(); |
|---|
| 512 | |
|---|
| 513 | if (stats.files_queued > 0) { |
|---|
| 514 | this.ctrl.btn_cancel.parent().show(); |
|---|
| 515 | this.ctrl.btn_upload.parent().show(); |
|---|
| 516 | if (this.params.file_queue_limit > 0 && this.params.file_queue_limit == stats.files_queued) { |
|---|
| 517 | this.ctrl.btn_browse.hide(); |
|---|
| 518 | } else { |
|---|
| 519 | this.ctrl.btn_browse.show(); |
|---|
| 520 | } |
|---|
| 521 | if (stats.files_queued > 1) { |
|---|
| 522 | var msg = this.locales.files_in_queue.replace(/%d/,stats.files_queued); |
|---|
| 523 | } else { |
|---|
| 524 | var msg = this.locales.file_in_queue; |
|---|
| 525 | } |
|---|
| 526 | } else { |
|---|
| 527 | this.ctrl.btn_browse.show(); |
|---|
| 528 | this.ctrl.btn_cancel.parent().hide(); |
|---|
| 529 | this.ctrl.btn_upload.parent().hide(); |
|---|
| 530 | var msg = this.locales.no_file_in_queue; |
|---|
| 531 | } |
|---|
| 532 | |
|---|
| 533 | this.ctrl.msg.removeClass('cu-error').text(msg); |
|---|
| 534 | |
|---|
| 535 | if (stats.successful_uploads > 0 || stats.upload_errors > 0 || stats.upload_cancelled > 0) { |
|---|
| 536 | this.ctrl.btn_clean.parent().show(); |
|---|
| 537 | } else { |
|---|
| 538 | this.ctrl.btn_clean.parent().hide(); |
|---|
| 539 | } |
|---|
| 540 | }, |
|---|
| 541 | |
|---|
| 542 | removeFileCancel: function(o) { |
|---|
| 543 | $('#' + o.id + ' span.cu-filecancel',this.ctrl.files).remove(); |
|---|
| 544 | }, |
|---|
| 545 | |
|---|
| 546 | appendFile: function(upldr,o) { |
|---|
| 547 | if (!this.ctrl.files) { |
|---|
| 548 | this.ctrl.files = $('<div class="cu-files"></div>'); |
|---|
| 549 | this.ctrl.msg.after(this.ctrl.files); |
|---|
| 550 | } |
|---|
| 551 | |
|---|
| 552 | var fileblock = $('<div class="cu-file" id="' + o.id + '">' + |
|---|
| 553 | '<div class="cu-fileinfo"><span class="cu-filename">' + o.name + '</span> ' + |
|---|
| 554 | '<span class="cu-filesize">(' + this.formatSize(o.size) + ')</span> ' + |
|---|
| 555 | '<span class="cu-filecancel"><a href="#">cancel</a></span> ' + |
|---|
| 556 | '<span class="cu-filemsg"></span>' + |
|---|
| 557 | '</div>'); |
|---|
| 558 | |
|---|
| 559 | $('span.cu-filecancel a',fileblock).click(function() { |
|---|
| 560 | upldr.CancelUpload(o.id); |
|---|
| 561 | return false; |
|---|
| 562 | }); |
|---|
| 563 | this.ctrl.files.append(fileblock); |
|---|
| 564 | }, |
|---|
| 565 | |
|---|
| 566 | fileProgressBar: function(file_id,bytes,total) { |
|---|
| 567 | var bar = $('#' + file_id + ' div.cu-progress>div',this.ctrl.files); |
|---|
| 568 | if (bar.length == 0) { |
|---|
| 569 | $('#' + file_id,this.ctrl.files).append('<div class="cu-progress"><div> </div></div>'); |
|---|
| 570 | bar = $('#' + file_id + ' div.cu-progress>div',this.ctrl.files); |
|---|
| 571 | } |
|---|
| 572 | |
|---|
| 573 | var percent = Math.round((bytes * 100) / total); |
|---|
| 574 | bar.css('width',percent+'%').text(percent + '%'); |
|---|
| 575 | }, |
|---|
| 576 | |
|---|
| 577 | fileMsg: function(file_id,msg,error) { |
|---|
| 578 | error = error || false; |
|---|
| 579 | var span = $('#' + file_id + ' span.cu-filemsg',this.ctrl.files).attr('class','cu-filemsg'); |
|---|
| 580 | if (error) { |
|---|
| 581 | span.addClass('cu-error'); |
|---|
| 582 | } |
|---|
| 583 | span.text(msg); |
|---|
| 584 | }, |
|---|
| 585 | |
|---|
| 586 | fileErrorMsg: function(file_id,msg) { |
|---|
| 587 | this.fileMsg(file_id,msg,true); |
|---|
| 588 | }, |
|---|
| 589 | |
|---|
| 590 | cancelQueue: function(upldr) { |
|---|
| 591 | if (!this.ctrl.files || this.ctrl.files.length == 0) { |
|---|
| 592 | return; |
|---|
| 593 | } |
|---|
| 594 | |
|---|
| 595 | this.ctrl.files.children('div').each(function() { |
|---|
| 596 | upldr.CancelUpload(this.id); |
|---|
| 597 | }); |
|---|
| 598 | }, |
|---|
| 599 | |
|---|
| 600 | uploadQueue: function(upldr) { |
|---|
| 601 | if (!this.ctrl.files || this.ctrl.files.length == 0) { |
|---|
| 602 | return; |
|---|
| 603 | } |
|---|
| 604 | |
|---|
| 605 | upldr.StartUpload(); |
|---|
| 606 | }, |
|---|
| 607 | |
|---|
| 608 | cleanQueue: function(upldr) { |
|---|
| 609 | var _this = this; |
|---|
| 610 | var e = $('div.cu-file',this.ctrl.files).not(':has(span.cu-filecancel a)'); |
|---|
| 611 | |
|---|
| 612 | e.filter(':last').slideUp(200,function() { |
|---|
| 613 | $(this).remove(); |
|---|
| 614 | if (e.length == 1) { |
|---|
| 615 | upldr.SetStats({successful_uploads:0, upload_errors:0, upload_cancelled:0}); |
|---|
| 616 | _this.refreshControls(upldr); |
|---|
| 617 | } else if (e.length > 1) { |
|---|
| 618 | _this.cleanQueue(upldr); |
|---|
| 619 | } |
|---|
| 620 | }); |
|---|
| 621 | }, |
|---|
| 622 | |
|---|
| 623 | queueErrorMsg: function(msg) { |
|---|
| 624 | this.ctrl.msg.addClass('cu-error').text(this.locales.queue_error + ' ' + msg); |
|---|
| 625 | }, |
|---|
| 626 | |
|---|
| 627 | formatSize: function(s) { |
|---|
| 628 | var a_size = Array('B', 'KB', 'MB', 'GB', 'TB'); |
|---|
| 629 | var i_index = 0; |
|---|
| 630 | while (s > 1024) { |
|---|
| 631 | i_index++; |
|---|
| 632 | s/=1024; |
|---|
| 633 | } |
|---|
| 634 | return (Math.round(s * 100) /100) + ' ' + a_size[i_index]; |
|---|
| 635 | }, |
|---|
| 636 | |
|---|
| 637 | bindEvent: function(evt,a) { |
|---|
| 638 | if (this.params.callbacks[evt] != undefined && $.isFunction(this.params.callbacks[evt])) { |
|---|
| 639 | a = a || new Array(); |
|---|
| 640 | this.params.callbacks[evt].apply(this,a); |
|---|
| 641 | } |
|---|
| 642 | } |
|---|
| 643 | }; |
|---|
| 644 | })(jQuery); |
|---|