upload.js 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. $(function () {
  2. function checkMimeTypes(mimeTypesTest) {
  3. var mimeDetect=false;
  4. Config_mimeTypes.forEach(function(item, index, array) {
  5. var regex = item.replace(/\//g, "\\\/");
  6. if (mimeTypesTest.match(regex) != undefined) {
  7. mimeDetect=true;
  8. }
  9. });
  10. if ((Config_mimeTypesConduct == 'allow' && mimeDetect)
  11. || (Config_mimeTypesConduct == 'deny' && !mimeDetect)) {
  12. return true;
  13. } else {
  14. return false;
  15. }
  16. }
  17. /**
  18. * Function called to upload one file.
  19. * @param file
  20. * @param item
  21. */
  22. function uploadFile(item, file, expire, random, resize, key) {
  23. // Add progress bar
  24. $('.progress').show();
  25. $('.progress').append('<span class="file-' + item + '">' + file.name + '</span><br /><progress class="progress-' + item + '" value="0" max="100"></progress>');
  26. // Create object XMLHttpRequest
  27. var request = new XMLHttpRequest();
  28. // Event progress to change value of progress bar
  29. request.upload.addEventListener('progress', function (e) {
  30. $('.progress-' + item).css('display', 'block');
  31. var value = Math.round((e.loaded / e.total) * 100);
  32. $('.progress-' + item).attr("value", value);
  33. }, false);
  34. // Create object FormData
  35. var formData = new FormData();
  36. // Add file to FormData
  37. formData.append('random', random);
  38. formData.append('item', item);
  39. formData.append('file', file);
  40. formData.append('expire', expire);
  41. formData.append('resize', resize);
  42. formData.append('key', key);
  43. // File to call
  44. request.open('post', 'upload.php');
  45. // Function called when request ended
  46. request.onload = function (e) {
  47. $('#result').append(request.response);
  48. };
  49. // Send request
  50. request.send(formData);
  51. }
  52. /**
  53. * Function called to upload files.
  54. */
  55. function upload() {
  56. // Vide les messages si jamais il y en avait
  57. $( "#preUpload" ).html( "" );
  58. var upload = true;
  59. // Get files
  60. var files = $('#files')[0].files;
  61. var expire = Math.floor(Date.now() / 1000 + $('#expire').val() * 86400);
  62. var random = Math.floor(Math.random() * Math.floor(99));
  63. // Check size and mime
  64. var fileAlreadyUploadSizeTotal = 0;
  65. for (var i = 0; i < files.length; i++) {
  66. // Size
  67. fileAlreadyUploadSizeTotal = fileAlreadyUploadSizeTotal + document.getElementById("files").files[i].size;
  68. if (document.getElementById("files").files[i].size > Config_maxUploadPerFile) {
  69. $('#preUpload').append('<div class="highlight-1">' + document.getElementById("files").files[i].name + ' : ' + Msg_errorFileSize + '</div>');
  70. upload = false;
  71. }
  72. // Mime
  73. if (!checkMimeTypes(document.getElementById("files").files[i].type)) {
  74. $('#preUpload').append('<div class="highlight-1">' + document.getElementById("files").files[i].name + ' : ' + Msg_errorFileType + '</div>');
  75. upload = false;
  76. }
  77. }
  78. if (fileAlreadyUploadSizeTotal > Config_maxUploadTotal) {
  79. $('#preUpload').append('<div class="highlight-1">' + Msg_errorTotalSize + '</div>');
  80. upload = false;
  81. }
  82. if (files.length > Config_maxUploadNb) {
  83. $('#preUpload').append('<div class="highlight-1">' + Msg_errorUploadNb + '</div>');
  84. upload = false;
  85. }
  86. if (files.length == 0) {
  87. upload = false;
  88. }
  89. // Upload file by file
  90. if (upload == true) {
  91. // Session pour compter le nombre de fichier en cours de download
  92. sessionStorage.setItem('uploadWait', files.length);
  93. $( ".uploadArea" ).hide();
  94. // On lance l'upload fichier par fichier:
  95. for (var i = 0; i < files.length; i++) {
  96. if (i == 0) {
  97. // On mémorise l'upload dans le localStorage
  98. if (localStorage.getItem('myFiles')) {
  99. var data = JSON.parse(localStorage.getItem('myFiles'));
  100. } else {
  101. var data = {items: []};
  102. }
  103. var keyGen = Math.floor(Math.random() * (999999999999 - 100000000000) + 100000000000);
  104. data.items.push(
  105. {id: expire + '-' + random, key: keyGen}
  106. );
  107. localStorage.setItem('myFiles', JSON.stringify(data));
  108. }
  109. uploadFile(i, files[i], expire, random, $('#resize').val(), keyGen);
  110. }
  111. }
  112. }
  113. // Copy on clipart : https://stackoverflow.com/questions/44888884/copying-to-clipboard-textbox-value-using-jquery-javascript
  114. function copyToClipboard(text) {
  115. var textArea = document.createElement( "textarea" );
  116. textArea.value = text;
  117. document.body.appendChild( textArea );
  118. textArea.select();
  119. try {
  120. var successful = document.execCommand( 'copy' );
  121. var msg = successful ? 'successful' : 'unsuccessful';
  122. } catch (err) {
  123. console.log('Oops, unable to copy');
  124. }
  125. document.body.removeChild( textArea );
  126. }
  127. $('.btn-upload').on('click', upload);
  128. $( "#similarServices" ).click(function() {
  129. $('.similarHref').hide();
  130. $('.similarLink').show();
  131. });
  132. $(document).on('click', '.copy', function(){
  133. copyToClipboard($(this).val());
  134. $(this).select();
  135. });
  136. $("input[type=file]").on('change',function(){
  137. $('#resizeForm').hide();
  138. for (var i = 0; i < this.files.length; i++) {
  139. var mime = this.files[i].type;
  140. if (mime.match('^image\/(jpeg|gif)$')) {
  141. $('#resizeForm').show();
  142. }
  143. }
  144. });
  145. /* infobulles http://javascript.developpez.com/tutoriels/javascript/creer-info-bulles-css-et-javascript-simplement-avec-jquery/ */
  146. // Sélectionner tous les liens ayant l'attribut rel valant tooltip
  147. $('a[rel=tooltip]').mouseover(function(e) {
  148. // Récupérer la valeur de l'attribut title et l'assigner à une variable
  149. var tip = $(this).attr('title');
  150. // Supprimer la valeur de l'attribut title pour éviter l'infobulle native
  151. $(this).attr('title','');
  152. // Insérer notre infobulle avec son texte dans la page
  153. $(this).append('<div id="tooltip"><div class="tipBody">' + tip + '</div></div>');
  154. // Ajuster les coordonnées de l'infobulle
  155. $('#tooltip').css('top', e.pageY - 30 );
  156. $('#tooltip').css('left', e.pageX - 145 );
  157. // Faire apparaitre l'infobulle avec un effet fadeIn
  158. }).mousemove(function(e) {
  159. // Ajuster la position de l'infobulle au déplacement de la souris
  160. $('#tooltip').css('top', e.pageY - 30 );
  161. $('#tooltip').css('left', e.pageX - 145 );
  162. }).mouseout(function() {
  163. // Réaffecter la valeur de l'attribut title
  164. $(this).attr('title',$('.tipBody').html());
  165. // Supprimer notre infobulle
  166. $(this).children('div#tooltip').remove();
  167. });
  168. });