|
1 | 1 | /*
|
2 |
| - * jQuery File Upload Plugin 3.0 |
| 2 | + * jQuery File Upload Plugin 3.1 |
3 | 3 | *
|
4 | 4 | * Copyright 2010, Sebastian Tschan, AQUANTUM
|
5 | 5 | * Licensed under the MIT license:
|
|
34 | 34 | dropZoneListeners = {},
|
35 | 35 | fileInputListeners = {},
|
36 | 36 | undef = 'undefined',
|
| 37 | + func = 'function', |
37 | 38 | protocolRegExp = /^http(s)?:\/\//,
|
38 | 39 | onInputChangeCalled,
|
39 | 40 |
|
|
44 | 45 | },
|
45 | 46 |
|
46 | 47 | initEventHandlers = function () {
|
47 |
| - documentListeners['dragenter.' + settings.namespace] = function (e) { |
48 |
| - fileUpload.onDocumentDragEnter(e); |
49 |
| - }; |
50 |
| - documentListeners['dragover.' + settings.namespace] = function (e) { |
51 |
| - fileUpload.onDocumentDragOver(e); |
52 |
| - }; |
53 |
| - documentListeners['dragleave.' + settings.namespace] = function (e) { |
54 |
| - fileUpload.onDocumentDragLeave(e); |
55 |
| - }; |
| 48 | + if (typeof settings.onDocumentDragEnter === func) { |
| 49 | + documentListeners['dragenter.' + settings.namespace] = settings.onDocumentDragEnter; |
| 50 | + } |
| 51 | + if (typeof settings.onDocumentDragLeave === func) { |
| 52 | + documentListeners['dragleave.' + settings.namespace] = settings.onDocumentDragLeave; |
| 53 | + } |
| 54 | + documentListeners['dragover.' + settings.namespace] = fileUpload.onDocumentDragOver; |
| 55 | + documentListeners['drop.' + settings.namespace] = fileUpload.onDocumentDrop; |
56 | 56 | $(document).bind(documentListeners);
|
57 |
| - dropZoneListeners['dragenter.' + settings.namespace] = function (e) { |
58 |
| - fileUpload.onDragEnter(e); |
59 |
| - }; |
60 |
| - dropZoneListeners['dragover.' + settings.namespace] = function (e) { |
61 |
| - fileUpload.onDragOver(e); |
62 |
| - }; |
63 |
| - dropZoneListeners['dragleave.' + settings.namespace] = function (e) { |
64 |
| - fileUpload.onDragLeave(e); |
65 |
| - }; |
66 |
| - dropZoneListeners['drop.' + settings.namespace] = function (e) { |
67 |
| - fileUpload.onDrop(e); |
68 |
| - }; |
| 57 | + if (typeof settings.onDragEnter === func) { |
| 58 | + dropZoneListeners['dragenter.' + settings.namespace] = settings.onDragEnter; |
| 59 | + } |
| 60 | + if (typeof settings.onDragLeave === func) { |
| 61 | + dropZoneListeners['dragleave.' + settings.namespace] = settings.onDragLeave; |
| 62 | + } |
| 63 | + dropZoneListeners['dragover.' + settings.namespace] = fileUpload.onDragOver; |
| 64 | + dropZoneListeners['drop.' + settings.namespace] = fileUpload.onDrop; |
69 | 65 | dropZone.bind(dropZoneListeners);
|
70 |
| - fileInputListeners['click.' + settings.namespace] = function (e) { |
71 |
| - fileUpload.onInputClick(e); |
72 |
| - }; |
73 |
| - fileInputListeners['change.' + settings.namespace] = function (e) { |
74 |
| - fileUpload.onInputChange(e); |
75 |
| - }; |
| 66 | + fileInputListeners['click.' + settings.namespace] = fileUpload.onInputClick; |
| 67 | + fileInputListeners['change.' + settings.namespace] = fileUpload.onInputChange; |
76 | 68 | fileInput.bind(fileInputListeners);
|
77 | 69 | },
|
78 | 70 |
|
79 | 71 | removeEventHandlers = function () {
|
80 |
| - $.each(documentListeners, function (i, listener) { |
81 |
| - if (documentListeners.hasOwnProperty(listener)) { |
82 |
| - $(document).unbind(listener); |
83 |
| - } |
| 72 | + $.each(documentListeners, function (key, value) { |
| 73 | + $(document).unbind(key, value); |
84 | 74 | });
|
85 |
| - $.each(dropZoneListeners, function (i, listener) { |
86 |
| - if (dropZoneListeners.hasOwnProperty(listener)) { |
87 |
| - dropZone.unbind(listener); |
88 |
| - } |
| 75 | + $.each(dropZoneListeners, function (key, value) { |
| 76 | + dropZone.unbind(key, value); |
89 | 77 | });
|
90 |
| - $.each(fileInputListeners, function (i, listener) { |
91 |
| - if (fileInputListeners.hasOwnProperty(listener)) { |
92 |
| - fileInput.unbind(listener); |
93 |
| - } |
| 78 | + $.each(fileInputListeners, function (key, value) { |
| 79 | + fileInput.unbind(key, value); |
94 | 80 | });
|
95 | 81 | },
|
96 | 82 |
|
97 | 83 | initUploadEventHandlers = function (files, index, xhr, settings) {
|
98 |
| - if (typeof settings.onProgress === 'function') { |
| 84 | + if (typeof settings.onProgress === func) { |
99 | 85 | xhr.upload.onprogress = function (e) {
|
100 | 86 | settings.onProgress(e, files, index, xhr, settings);
|
101 | 87 | };
|
102 | 88 | }
|
103 |
| - if (typeof settings.onLoad === 'function') { |
| 89 | + if (typeof settings.onLoad === func) { |
104 | 90 | xhr.onload = function (e) {
|
105 | 91 | settings.onLoad(e, files, index, xhr, settings);
|
106 | 92 | };
|
107 | 93 | }
|
108 |
| - if (typeof settings.onAbort === 'function') { |
| 94 | + if (typeof settings.onAbort === func) { |
109 | 95 | xhr.onabort = function (e) {
|
110 | 96 | settings.onAbort(e, files, index, xhr, settings);
|
111 | 97 | };
|
112 | 98 | }
|
113 |
| - if (typeof settings.onError === 'function') { |
| 99 | + if (typeof settings.onError === func) { |
114 | 100 | xhr.onerror = function (e) {
|
115 | 101 | settings.onError(e, files, index, xhr, settings);
|
116 | 102 | };
|
117 | 103 | }
|
118 | 104 | },
|
119 | 105 |
|
120 | 106 | getFormData = function (settings) {
|
121 |
| - if (typeof settings.formData === 'function') { |
| 107 | + if (typeof settings.formData === func) { |
122 | 108 | return settings.formData();
|
123 | 109 | } else if ($.isArray(settings.formData)) {
|
124 | 110 | return settings.formData;
|
|
216 | 202 | handleFile = function (event, files, index) {
|
217 | 203 | var xhr = new XMLHttpRequest(),
|
218 | 204 | uploadSettings = $.extend({}, settings);
|
219 |
| - if (typeof settings.initUpload === 'function') { |
| 205 | + if (typeof settings.initUpload === func) { |
220 | 206 | settings.initUpload(
|
221 | 207 | event,
|
222 | 208 | files,
|
|
247 | 233 | // javascript:false as iframe src prevents warning popups on HTTPS in IE6
|
248 | 234 | // concat is used here to prevent the "Script URL" JSLint error:
|
249 | 235 | iframe.unbind('load').attr('src', 'javascript'.concat(':false;'));
|
250 |
| - if (typeof settings.onAbort === 'function') { |
| 236 | + if (typeof settings.onAbort === func) { |
251 | 237 | settings.onAbort(e, [{name: input.value, type: null, size: null}], 0, iframe, settings);
|
252 | 238 | }
|
253 | 239 | })
|
254 | 240 | .unbind('load')
|
255 | 241 | .bind('load', function (e) {
|
256 | 242 | iframe.readyState = 4;
|
257 |
| - if (typeof settings.onLoad === 'function') { |
| 243 | + if (typeof settings.onLoad === func) { |
258 | 244 | settings.onLoad(e, [{name: input.value, type: null, size: null}], 0, iframe, settings);
|
259 | 245 | }
|
260 | 246 | });
|
|
291 | 277 | };
|
292 | 278 | iframe.bind('load', function () {
|
293 | 279 | iframe.unbind('load');
|
294 |
| - if (typeof settings.initUpload === 'function') { |
| 280 | + if (typeof settings.initUpload === func) { |
295 | 281 | settings.initUpload(
|
296 | 282 | event,
|
297 | 283 | [{name: input.value, type: null, size: null}],
|
|
307 | 293 | }
|
308 | 294 | }).appendTo(dropZone);
|
309 | 295 | };
|
310 |
| - |
311 |
| - this.onDocumentDragEnter = function (e) { |
312 |
| - if (typeof settings.onDocumentDragEnter === 'function') { |
313 |
| - if (settings.onDocumentDragEnter(e) === false) { |
314 |
| - return; |
315 |
| - } |
316 |
| - } |
317 |
| - e.preventDefault(); |
318 |
| - }; |
319 | 296 |
|
320 | 297 | this.onDocumentDragOver = function (e) {
|
321 |
| - if (typeof settings.onDocumentDragOver === 'function') { |
322 |
| - if (settings.onDocumentDragOver(e) === false) { |
323 |
| - return; |
324 |
| - } |
325 |
| - } |
326 |
| - var dataTransfer = e.originalEvent.dataTransfer, |
327 |
| - target = e.originalEvent.target; |
328 |
| - if (dataTransfer && dropZone.get(0) !== target && !dropZone.has(target).length) { |
329 |
| - dataTransfer.dropEffect = 'none'; |
330 |
| - } |
331 |
| - e.preventDefault(); |
332 |
| - }; |
333 |
| - |
334 |
| - this.onDocumentDragLeave = function (e) { |
335 |
| - if (typeof settings.onDocumentDragLeave === 'function') { |
336 |
| - if (settings.onDocumentDragLeave(e) === false) { |
337 |
| - return; |
338 |
| - } |
| 298 | + if (typeof settings.onDocumentDragOver === func && |
| 299 | + settings.onDocumentDragOver(e) === false) { |
| 300 | + return false; |
339 | 301 | }
|
340 | 302 | e.preventDefault();
|
341 | 303 | };
|
342 |
| - |
343 |
| - this.onDragEnter = function (e) { |
344 |
| - if (typeof settings.onDragEnter === 'function') { |
345 |
| - if (settings.onDragEnter(e) === false) { |
346 |
| - return; |
347 |
| - } |
| 304 | + |
| 305 | + this.onDocumentDrop = function (e) { |
| 306 | + if (typeof settings.onDocumentDrop === func && |
| 307 | + settings.onDocumentDrop(e) === false) { |
| 308 | + return false; |
348 | 309 | }
|
349 | 310 | e.preventDefault();
|
350 | 311 | };
|
351 | 312 |
|
352 | 313 | this.onDragOver = function (e) {
|
353 |
| - if (typeof settings.onDragOver === 'function') { |
354 |
| - if (settings.onDragOver(e) === false) { |
355 |
| - return; |
356 |
| - } |
| 314 | + if (typeof settings.onDragOver === func && |
| 315 | + settings.onDragOver(e) === false) { |
| 316 | + return false; |
357 | 317 | }
|
358 | 318 | var dataTransfer = e.originalEvent.dataTransfer;
|
359 | 319 | if (dataTransfer) {
|
360 | 320 | dataTransfer.dropEffect = dataTransfer.effectAllowed = 'copy';
|
361 | 321 | }
|
362 | 322 | e.preventDefault();
|
363 |
| - e.stopPropagation(); |
364 |
| - }; |
365 |
| - |
366 |
| - this.onDragLeave = function (e) { |
367 |
| - if (typeof settings.onDragLeave === 'function') { |
368 |
| - if (settings.onDragLeave(e) === false) { |
369 |
| - return; |
370 |
| - } |
371 |
| - } |
372 |
| - e.preventDefault(); |
373 | 323 | };
|
374 | 324 |
|
375 | 325 | this.onDrop = function (e) {
|
376 |
| - if (typeof settings.onDrop === 'function') { |
377 |
| - if (settings.onDrop(e) === false) { |
378 |
| - return; |
379 |
| - } |
| 326 | + if (typeof settings.onDrop === func && |
| 327 | + settings.onDrop(e) === false) { |
| 328 | + return false; |
380 | 329 | }
|
381 | 330 | var dataTransfer = e.originalEvent.dataTransfer;
|
382 | 331 | if (dataTransfer && dataTransfer.files && isXHRUploadCapable()) {
|
|
386 | 335 | };
|
387 | 336 |
|
388 | 337 | this.onInputClick = function (e) {
|
389 |
| - if (typeof settings.onInputClick === 'function') { |
390 |
| - if (settings.onInputClick(e) === false) { |
391 |
| - return; |
392 |
| - } |
| 338 | + if (typeof settings.onInputClick === func && |
| 339 | + settings.onInputClick(e) === false) { |
| 340 | + return false; |
393 | 341 | }
|
394 | 342 | e.target.form.reset();
|
395 | 343 | onInputChangeCalled = false;
|
396 | 344 | };
|
397 | 345 |
|
398 | 346 | this.onInputChange = function (e) {
|
| 347 | + if (typeof settings.onInputChange === func && |
| 348 | + settings.onInputChange(e) === false) { |
| 349 | + return false; |
| 350 | + } |
399 | 351 | if (onInputChangeCalled) {
|
400 | 352 | return;
|
401 | 353 | }
|
402 | 354 | onInputChangeCalled = true;
|
403 |
| - if (typeof settings.onInputChange === 'function') { |
404 |
| - if (settings.onInputChange(e) === false) { |
405 |
| - return; |
406 |
| - } |
407 |
| - } |
408 | 355 | if (e.target.files && isXHRUploadCapable()) {
|
409 | 356 | handleFiles(e, e.target.files);
|
410 | 357 | } else {
|
|
427 | 374 |
|
428 | 375 | this.destroy = function () {
|
429 | 376 | removeEventHandlers();
|
430 |
| - dropZone.removeData(settings.namespace) |
| 377 | + dropZone |
| 378 | + .removeData(settings.namespace) |
431 | 379 | .removeClass(settings.cssClass);
|
432 | 380 | };
|
433 | 381 | },
|
|
0 commit comments