script.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. // file upload function
  2. function uploadFile(name, mirror) {
  3. let fileSize;
  4. let xhr = new XMLHttpRequest();
  5. xhr.open("POST", mirror + "index.php");
  6. xhr.upload.addEventListener("progress", ({
  7. loaded,
  8. total
  9. }) => {
  10. let fileLoaded = Math.floor((loaded / total) * 100);
  11. let fileTotal = Math.floor(total / 1000);
  12. (fileTotal < 1024) ? fileSize = fileTotal + " KB": fileSize = (loaded / (1024 * 1024)).toFixed(2) + " MB";
  13. let progressHTML = `<li class="row">
  14. <i class="fas fa-file-alt"></i>
  15. <div class="content">
  16. <div class="details">
  17. <span class="name">${name} <i class="fa fa-upload" aria-hidden="true"></i></span>
  18. <span class="percent">${fileLoaded}%</span>
  19. </div>
  20. <div class="progress-bar">
  21. <div class="progress" style="width: ${fileLoaded}%"></div>
  22. </div>
  23. </div>
  24. </li>`;
  25. // uploadedArea.innerHTML = ""; //uncomment this line if you don't want to show upload history
  26. uploadedArea.classList.add("onprogress");
  27. progressArea.innerHTML = progressHTML;
  28. });
  29. let data = new FormData(form);
  30. xhr.send(data);
  31. xhr.onload = function() {
  32. var api_reply = JSON.parse(xhr.responseText);
  33. if (api_reply['status'] == "OK") {
  34. let url = api_reply['url'];
  35. //name = url.substring(url.lastIndexOf('/')+1);
  36. progressArea.innerHTML = "";
  37. let uploadedHTML = `<li class="row">
  38. <div class="content upload">
  39. <i class="fas fa-file-alt"></i>
  40. <div class="details">
  41. <span class="name">${name} [${fileSize}] <i class="fas fa-check"></i></span>
  42. <span class="small"><a href="${url}">${url}</a></span>
  43. </div>
  44. </div>
  45. <i onclick="copyTextToClipboard('${url}',this)" class="fas fa-clipboard"></i>
  46. </li>`;
  47. uploadedArea.classList.remove("onprogress");
  48. // uploadedArea.innerHTML = uploadedHTML; //uncomment this line if you don't want to show upload history
  49. uploadedArea.insertAdjacentHTML("afterbegin", uploadedHTML); //remove this line if you don't want to show upload history
  50. } else if (api_reply['status'] == "FAIL") {
  51. let error = api_reply['msg'];
  52. progressArea.innerHTML = "";
  53. let uploadedHTML = `<li class="row">
  54. <div class="content upload">
  55. <i class="fas fa-file-alt"></i>
  56. <div class="details">
  57. <span class="name">${name} [${fileSize}]</span>
  58. <span class="small">${error}</a></span>
  59. </div>
  60. </div>
  61. <i class="fas fa-exclamation-triangle"></i>
  62. </li>`;
  63. uploadedArea.classList.remove("onprogress");
  64. // uploadedArea.innerHTML = uploadedHTML; //uncomment this line if you don't want to show upload history
  65. uploadedArea.insertAdjacentHTML("afterbegin", uploadedHTML); //remove this line if you don't want to show upload history
  66. }
  67. }
  68. }
  69. // Fallback function to copy text to clipboard
  70. function fallbackCopyTextToClipboard(text) {
  71. var textArea = document.createElement("textarea");
  72. textArea.value = text;
  73. // Avoid scrolling to bottom
  74. textArea.style.top = "0";
  75. textArea.style.left = "0";
  76. textArea.style.position = "fixed";
  77. document.body.appendChild(textArea);
  78. textArea.focus();
  79. textArea.select();
  80. try {
  81. var successful = document.execCommand('copy');
  82. var msg = successful ? 'successful' : 'unsuccessful';
  83. console.log('Fallback: Copying text command was ' + msg);
  84. } catch (err) {
  85. console.error('Fallback: Oops, unable to copy', err);
  86. }
  87. document.body.removeChild(textArea);
  88. }
  89. // Main function to copy text to clipboard
  90. function copyTextToClipboard(text,el) {
  91. if (!navigator.clipboard) {
  92. fallbackCopyTextToClipboard(text);
  93. }
  94. else{
  95. navigator.clipboard.writeText(text).then(
  96. function() {
  97. console.log('Async: Copying to clipboard was successful!');
  98. }, function(err) {
  99. console.error('Async: Could not copy text: ', err);
  100. }
  101. );
  102. }
  103. el.className = "fas fa-check";
  104. setTimeout(()=> {
  105. el.className = "fas fa-clipboard";
  106. },3000);
  107. }
  108. // Main function to copy text to clipboard
  109. function copyTextToClipboard(text) {
  110. if (!navigator.clipboard) {
  111. fallbackCopyTextToClipboard(text);
  112. }
  113. else{
  114. navigator.clipboard.writeText(text).then(
  115. function() {
  116. console.log('Async: Copying to clipboard was successful!');
  117. }, function(err) {
  118. console.error('Async: Could not copy text: ', err);
  119. }
  120. );
  121. }
  122. }
  123. // When the user clicks on <div>, open the popup
  124. function showPopup(popupId,text) {
  125. var popup = document.getElementById(popupId);
  126. copyTextToClipboard(text)
  127. popup.classList.toggle("show");
  128. setTimeout(()=> {
  129. popup.classList.toggle("show");
  130. },3000);
  131. }