main.js 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. $(function(){
  2. $(document).bind('drop dragover', function (e) {
  3. e.preventDefault();
  4. });
  5. $(document).bind('dragover', function () {
  6. $('.main').addClass('drop');
  7. })
  8. $(document).bind('dragexit dragleave dragend drop', function () {
  9. $('.main').removeClass('drop');
  10. })
  11. var fileupload = $('#fileupload').fileupload({
  12. dataType: 'json',
  13. url: 'upload.json',
  14. dropZone: $(document),
  15. pasteZone: $(document),
  16. add: add
  17. });
  18. fileupload.bind('fileuploaddone', done);
  19. fileupload.bind('fileuploadfail', fail);
  20. fileupload.bind('fileuploadprogress', progress);
  21. var xhrCache = [];
  22. function add (e, data) {
  23. $('.message').hide();
  24. var xhr = data.submit();
  25. $.each(data.files, function(index, file){
  26. file._ID = xhrCache.length;
  27. xhrCache[file._ID] = xhr;
  28. var hasProgressbar = ('FormData' in window);
  29. var html = '<li data-file-id="' + file._ID + '">';
  30. html += '<div class="filename">' + file.name + '</div>';
  31. html += '<div class="progress"><div class="bar" style="width: 0%"></div>';
  32. if (!hasProgressbar) { html += '<span class="dots"></span>'; }
  33. html += '</div>';
  34. if (hasProgressbar) { html += '<div class="stop"></div>'; }
  35. html += '</li>';
  36. var tmpl = $(html);
  37. if (!hasProgressbar) {
  38. var progress = tmpl.find('.progress');
  39. var bar = progress.find('.bar');
  40. var dots = progress.find('.dots');
  41. function doting() {
  42. if (bar.css('width') != '0px') { return; }
  43. if (dots.text().length == 3) {
  44. dots.text('');
  45. }
  46. else {
  47. dots.text(dots.text() + '.');
  48. }
  49. setTimeout(doting, 750);
  50. }
  51. setTimeout(doting, 10);
  52. }
  53. $('.uploads ul').append(tmpl);
  54. });
  55. }
  56. function done (e, data) {
  57. $.each(data.files, function (index, file) {
  58. $('li[data-file-id=' + file._ID + ']').addClass('done');
  59. });
  60. }
  61. function progress (e, data) {
  62. var prog = Math.ceil(data.loaded / data.total * 100) + '%';
  63. $.each(data.files, function (index, file) {
  64. $('li[data-file-id=' + file._ID + '] .progress .bar').css('width', prog);
  65. });
  66. }
  67. function fail (e, data) {
  68. console.log('File transfer failed', data.errorThrown, data.textStatus);
  69. $.each(data.files, function (index, file) {
  70. $('li[data-file-id=' + file._ID + ']').addClass('fail');
  71. });
  72. }
  73. $('.uploads').delegate('.stop', 'click', stopTransfer);
  74. function stopTransfer (e) {
  75. var li = $(e.currentTarget).parent('li');
  76. var id = li.data('file-id');
  77. xhrCache[id].abort();
  78. li.addClass('fail');
  79. }
  80. });