ShareCODE

asaasda EYAN

  1. // ==UserScript==
  2. // @name ShareCODE
  3. // @namespace https://bbs.tampermonkey.net.cn/
  4. // @version 0.1.0
  5. // @description asaasda EYAN
  6. // @author HydroGest
  7. // @license MIT
  8. // @match http://121.36.38.167/
  9. // @grant GM_xmlhttpRequest
  10. // @grant unsafeWindow
  11. // @grant GM_setValue
  12. // @grant GM_getValue
  13. // @grant GM_deleteValue
  14. // ==/UserScript==
  15.  
  16. (function() {
  17. 'use strict';
  18. const menuDiv = document.querySelectorAll('.menu')[2];
  19. if (menuDiv) {
  20. const newItem = document.createElement('div');
  21. newItem.className = 'item';
  22. newItem.innerHTML = '<i class="closed captioning icon"></i>加载共享文件';
  23. newItem.addEventListener('click', loadSharedFile);
  24. menuDiv.appendChild(newItem);
  25. }
  26.  
  27.  
  28. function loadSharedFile() {
  29. const pcode = prompt('请输入取件码');
  30. if (!pcode) {
  31. alert("错误的取件码!");
  32. return;
  33. }
  34. const code = getPublicCode(pcode);
  35. if (code) {
  36. sourceEditor.setValue(code);
  37. }
  38. }
  39.  
  40. function generateRandomCode(length = 6) {
  41. let result = '';
  42. const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  43. for (let i = 0; i < length; i++) {
  44. result += characters.charAt(Math.floor(Math.random() * characters.length));
  45. }
  46. return result;
  47. }
  48.  
  49. function savePublicCode(code) {
  50. const pickUpCode = generateRandomCode();
  51. const expirationDate = new Date();
  52. expirationDate.setDate(expirationDate.getDate() + 1);
  53. // 使用 GM_setValue 来模拟 localStorage.setItem
  54. GM_setValue(pickUpCode, JSON.stringify({ code, expirationDate }));
  55. return pickUpCode;
  56. }
  57.  
  58. function getPublicCode(pickUpCode) {
  59. const storedData = GM_getValue(pickUpCode);
  60. if (!storedData) {
  61. return null;
  62. }
  63. const { code, expirationDate } = JSON.parse(storedData);
  64. const currentDate = new Date();
  65. if (currentDate > expirationDate) {
  66. GM_deleteValue(pickUpCode);
  67. return null;
  68. }
  69. return code;
  70. }
  71.  
  72. function shareFile(filename) {
  73. GM_xmlhttpRequest({
  74. method: 'GET',
  75. url: `/load_file_content?filename=${encodeURIComponent(filename)}`,
  76. onload: function(response) {
  77. const data = JSON.parse(response.responseText);
  78. if (data.success) {
  79. console.log(data.code);
  80. const code = savePublicCode(data.code);
  81. alert(`代码分享成功!取件码:${code}`);
  82. } else {
  83. alert('Failed to load file content: ' + data.message);
  84. }
  85. },
  86. onerror: function(error) {
  87. console.error('Error:', error);
  88. alert('An error occurred while loading file content.');
  89. }
  90. });
  91. }
  92.  
  93.  
  94. // 渲染文件列表
  95. function renderFileList() {
  96. const data = fileListData;
  97. const currentPage = fileListCurPage;
  98.  
  99. console.log(data, currentPage);
  100.  
  101. if (!data) {
  102. showFileList();
  103. return;
  104. }
  105. const fileListDiv = document.getElementById('file-list');
  106. fileListDiv.innerHTML = '';
  107.  
  108. // 计算总页数
  109. const totalItems = data.files.length;
  110. const itemsPerPage = 8;
  111. totalPages = Math.ceil(totalItems / itemsPerPage);
  112.  
  113. // 对文件列表按时间倒序排序
  114. data.files.sort((a, b) => new Date(b.created_time) - new Date(a.created_time));
  115.  
  116. // 创建文件列表并进行分页显示
  117. const startIndex = (currentPage - 1) * itemsPerPage;
  118. const endIndex = Math.min(startIndex + itemsPerPage, totalItems);
  119.  
  120. document.getElementById("cur-page").setAttribute("data-text", currentPage + "/" + totalPages);
  121.  
  122. for (let i = startIndex; i < endIndex; i++) {
  123. const file = data.files[i];
  124. const fileItemDiv = document.createElement('div');
  125. fileItemDiv.className = 'item';
  126. fileItemDiv.style.display = 'flex';
  127. fileItemDiv.style.alignItems = 'center';
  128. fileItemDiv.style.justifyContent = 'space-between';
  129. fileItemDiv.style.marginBottom = '10px';
  130.  
  131. const fileName = document.createElement('div');
  132. fileName.classList.add('content');
  133. fileName.style.flexGrow = '1';
  134.  
  135. const filename = file.filename;
  136. const date = new Date(file.created_time.replace('GMT', 'UTC+8:00'));
  137. const time = date.toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai' });
  138.  
  139. // 创建包含编号和文件名的容器
  140. const fileInfoDiv = document.createElement('div');
  141. fileInfoDiv.style.display = 'flex';
  142. fileInfoDiv.style.alignItems = 'center';
  143.  
  144. // 添加编号
  145. const fileNumber = document.createElement('span');
  146. fileNumber.textContent = `${i + 1}. `;
  147. fileNumber.style.color = '#000';
  148. fileNumber.style.fontWeight = 'bold';
  149.  
  150. // 添加文件名
  151. const fileTitle = document.createElement('span');
  152. fileTitle.textContent = filename;
  153. fileTitle.style.color = '#007bff';
  154.  
  155. // 将编号和文件名添加到容器中
  156. fileInfoDiv.appendChild(fileNumber);
  157. fileInfoDiv.appendChild(fileTitle);
  158.  
  159. fileName.innerHTML = `
  160. ${fileInfoDiv.outerHTML}
  161. <div class="description">上次修改时间:${time}</div>
  162. `;
  163.  
  164. const icon = document.createElement('i');
  165. icon.className = "large file middle aligned icon";
  166.  
  167. const fileManage = document.createElement('div');
  168. fileManage.className = "right floated content";
  169. fileManage.style.display = 'flex';
  170. fileManage.style.gap = '10px';
  171.  
  172. const fileButton = document.createElement('div');
  173. fileButton.className = 'ui button compact';
  174. fileButton.innerHTML = `<i class="folder open icon"></i>加载`;
  175. fileButton.style.writingMode = 'horizontal-tb';
  176. fileButton.style.whiteSpace = 'nowrap';
  177. fileButton.onclick = () => loadFileContent(file.filename);
  178.  
  179. const deleteButton = document.createElement('div');
  180. deleteButton.className = 'ui red button compact';
  181. deleteButton.innerHTML = '<i class="trash icon"></i>';
  182. deleteButton.style.writingMode = 'horizontal-tb';
  183. deleteButton.style.whiteSpace = 'nowrap';
  184. deleteButton.onclick = () => deleteFile(file.filename, false);
  185.  
  186. const shareButton = document.createElement('div');
  187. shareButton.className = 'ui button compact';
  188. shareButton.innerHTML = '<i class="share icon"></i>分享';
  189. shareButton.style.writingMode = 'horizontal-tb';
  190. shareButton.style.whiteSpace = 'nowrap';
  191. shareButton.onclick = () => shareFile(file.filename);
  192.  
  193. const manageButtons = document.createElement('div');
  194. manageButtons.className = "ui buttons";
  195.  
  196. manageButtons.appendChild(fileButton);
  197. manageButtons.appendChild(shareButton);
  198. manageButtons.appendChild(deleteButton);
  199. fileManage.append(manageButtons);
  200.  
  201. fileItemDiv.appendChild(icon);
  202. fileItemDiv.appendChild(fileName);
  203. fileItemDiv.appendChild(fileManage);
  204. fileListDiv.appendChild(fileItemDiv);
  205. }
  206. }
  207.  
  208. unsafeWindow.renderFileList = renderFileList;
  209.  
  210. })();