script.js 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  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} • Uploading</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. progressArea.innerHTML = "";
  36. let uploadedHTML = `<li class="row">
  37. <div class="content upload">
  38. <i class="fas fa-file-alt"></i>
  39. <div class="details">
  40. <span class="name">${name} [${fileSize}] <i class="fas fa-check"></i></span>
  41. <span class="small"><a href="${url}">${url}</a></span>
  42. </div>
  43. </div>
  44. <i onclick="copyTextToClipboard('${url}',this)" class="fas fa-clipboard"></i>
  45. </li>`;
  46. uploadedArea.classList.remove("onprogress");
  47. // uploadedArea.innerHTML = uploadedHTML; //uncomment this line if you don't want to show upload history
  48. uploadedArea.insertAdjacentHTML("afterbegin", uploadedHTML); //remove this line if you don't want to show upload history
  49. } else if (api_reply['status'] == "FAIL") {
  50. let error = api_reply['msg'];
  51. progressArea.innerHTML = "";
  52. let uploadedHTML = `<li class="row">
  53. <div class="content upload">
  54. <i class="fas fa-file-alt"></i>
  55. <div class="details">
  56. <span class="name">${name} [${fileSize}]</span>
  57. <span class="small">${error}</a></span>
  58. </div>
  59. </div>
  60. <i class="fas fa-exclamation-triangle"></i>
  61. </li>`;
  62. uploadedArea.classList.remove("onprogress");
  63. // uploadedArea.innerHTML = uploadedHTML; //uncomment this line if you don't want to show upload history
  64. uploadedArea.insertAdjacentHTML("afterbegin", uploadedHTML); //remove this line if you don't want to show upload history
  65. }
  66. }
  67. }
  68. // Fallback function to copy text to clipboard
  69. function fallbackCopyTextToClipboard(text) {
  70. var textArea = document.createElement("textarea");
  71. textArea.value = text;
  72. // Avoid scrolling to bottom
  73. textArea.style.top = "0";
  74. textArea.style.left = "0";
  75. textArea.style.position = "fixed";
  76. document.body.appendChild(textArea);
  77. textArea.focus();
  78. textArea.select();
  79. try {
  80. var successful = document.execCommand('copy');
  81. var msg = successful ? 'successful' : 'unsuccessful';
  82. console.log('Fallback: Copying text command was ' + msg);
  83. } catch (err) {
  84. console.error('Fallback: Oops, unable to copy', err);
  85. }
  86. document.body.removeChild(textArea);
  87. }
  88. // Main function to copy text to clipboard
  89. function copyTextToClipboard(text,el) {
  90. if (!navigator.clipboard) {
  91. fallbackCopyTextToClipboard(text);
  92. }
  93. else{
  94. navigator.clipboard.writeText(text).then(
  95. function() {
  96. console.log('Async: Copying to clipboard was successful!');
  97. }, function(err) {
  98. console.error('Async: Could not copy text: ', err);
  99. }
  100. );
  101. }
  102. el.className = "fas fa-check";
  103. setTimeout(()=> {
  104. el.className = "fas fa-clipboard";
  105. },3000);
  106. }
  107. // Main function to copy text to clipboard
  108. function copyTextToClipboard(text) {
  109. if (!navigator.clipboard) {
  110. fallbackCopyTextToClipboard(text);
  111. }
  112. else{
  113. navigator.clipboard.writeText(text).then(
  114. function() {
  115. console.log('Async: Copying to clipboard was successful!');
  116. }, function(err) {
  117. console.error('Async: Could not copy text: ', err);
  118. }
  119. );
  120. }
  121. }
  122. // When the user clicks on <div>, open the popup
  123. function showPopup(popupId,text) {
  124. var popup = document.getElementById(popupId);
  125. copyTextToClipboard(text)
  126. popup.classList.toggle("show");
  127. setTimeout(()=> {
  128. popup.classList.toggle("show");
  129. },3000);
  130. }