disk.html 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <link href="css/tocas.css" rel='stylesheet'>
  6. <script src="css/tocas.js"></script>
  7. <script src="jquery.js"></script>
  8. <title>aCloud File Viewer (Community Edition)</title>
  9. <style type="text/css">
  10. body {
  11. padding-top: 4em;
  12. background-color: rgb(250, 250, 250);
  13. overflow: hidden;
  14. }
  15. .ts.segmented.list {
  16. height: 100vh;
  17. }
  18. </style>
  19. </head>
  20. <body>
  21. <div class="ts narrow container">
  22. <div class="ts breadcrumb">
  23. <a href="#!" class="section">aCloud (社群版)</a>
  24. <div class="divider">/</div>
  25. <div href="#!" class="section">檔案管理員</div>
  26. <div class="divider">/</div>
  27. <div class="active section">
  28. <i class="folder icon"></i>目前資料夾:<div id="currentPath" style="display:inline;">/web</div>
  29. </div>
  30. </div>
  31. <br><br>
  32. <div class="ts grid">
  33. <div class="eleven wide column">
  34. <div id="fileList" class="ts selection segmented list">
  35. <a href="#!" class="item" filepath="" filetype="file" onClick="selectItem(this);" ondblClick="openItem(this);">
  36. <i class="file outline icon"></i>
  37. Loading...
  38. </a>
  39. </div>
  40. </div>
  41. <div class="five wide column">
  42. <div class="ts card">
  43. <div class="secondary very padded extra content">
  44. <div class="ts icon header">
  45. <i id="fileicon" class="file image outline icon"></i>
  46. </div>
  47. </div>
  48. <div class="extra content">
  49. <div id="filename" class="header">N/A</div>
  50. </div>
  51. <div class="extra content">
  52. <div class="ts list">
  53. <div class="item">
  54. <button class="ts primary button" onClick="printThis();">打印</button>
  55. </div>
  56. <div class="item">
  57. <button class="ts basic button" onClick="openFile();">打開檔案</button>
  58. </div>
  59. <div class="item">
  60. <button class="ts negative button" onClick="deleteFile();">刪除檔案</button>
  61. </div>
  62. </div>
  63. </div>
  64. </div>
  65. <div class="ts horizontal right floated middoted link list">
  66. <a href="#" class="item">關於</a>
  67. <a href="http://aroz.online" class="item">aCloud 個人雲端</a>
  68. </div>
  69. </div>
  70. </div>
  71. </div>
  72. <script>
  73. loadDirectory("/web");
  74. function selectItem(object){
  75. $(".active.item").removeClass("active");
  76. $(object).addClass("active");
  77. var filename = $(object).attr("filepath");
  78. var ext = getExt(filename);
  79. $("#filename").text(basename(filename));
  80. $("#fileicon").attr('class',getIconFromExt(ext) + " icon");
  81. }
  82. function loadDirectory(path){
  83. var template = '<a href="#!" class="item" filepath="{filepath}" filetype="{filetype}" onClick="selectItem(this);" ondblClick="openItem(this);">\
  84. <i class="{exticon} icon"></i>\
  85. {displayanme}\
  86. </a>';
  87. var backBtn = '<a href="#!" class="item" ondblClick="parentDir();">\
  88. <i class="reply icon"></i>\
  89. ../\
  90. </a>';
  91. $("#fileList").html("");
  92. if (path != "/web"){
  93. $("#fileList").append(backBtn);
  94. }
  95. $.get("/list?dir=" + path,function(data){
  96. for (var i =0; i < data.length; i++){
  97. var box = template;
  98. box = box.replace("{filetype}",data[i]["type"]);
  99. box = box.replace("{filepath}",data[i]["name"]);
  100. var filename = basename(data[i]["name"]);
  101. box = box.replace("{displayanme}",filename);
  102. var ext = getExt(filename);
  103. if (data[i]["type"] == "dir"){
  104. box = box.replace("{exticon}","folder outline");
  105. }else{
  106. box = box.replace("{exticon}",getIconFromExt(ext));
  107. }
  108. $("#fileList").append(box);
  109. $("#currentPath").text(path);
  110. }
  111. });
  112. }
  113. function printThis(){
  114. alert("To be implemented by 3D printer manufacturer.");
  115. }
  116. function openFile(){
  117. if ($(".active.item").length == 0){
  118. alert("Please select a file / folder to open.");
  119. }
  120. openItem($(".active.item")[0]);
  121. }
  122. function deleteFile(){
  123. if ($(".active.item").length == 0){
  124. alert("Please select a file / folder to delete.");
  125. }
  126. var filepath = $(".active.item").attr('filepath');
  127. if (confirm("Are you sure you want to delete file: " + filepath + " ?")){
  128. $.get("/delete," + filepath,function(data){
  129. console.log(data);
  130. loadDirectory($("#currentPath").text().trim());
  131. });
  132. }
  133. }
  134. function parentDir(){
  135. var currentdir = $("#currentPath").text().trim();
  136. var parent = currentdir.split("/");
  137. parent.pop();
  138. parent = parent.join("/");
  139. loadDirectory(parent);
  140. }
  141. function basename(path){
  142. return path.split("/").pop();
  143. }
  144. function getExt(filename){
  145. return filename.split(".").pop();
  146. }
  147. function openItem(object){
  148. var filepath = $(object).attr("filepath");
  149. var filetype = $(object).attr("filetype");
  150. if (filetype == "file"){
  151. //Open in new tab
  152. window.open(filepath);
  153. }else{
  154. //Folder. Load new contents.
  155. loadDirectory(filepath);
  156. }
  157. }
  158. function getIconFromExt(ext){
  159. var ext = ext.toLowerCase().trim();
  160. var iconList={
  161. md:"file text outline",
  162. txt:"file text outline",
  163. pdf:"file pdf outline",
  164. doc:"file word outline",
  165. docx:"file word outline",
  166. odt:"file word outline",
  167. xlsx:"file excel outline",
  168. ods:"file excel outline",
  169. ppt:"file powerpoint outline",
  170. pptx:"file powerpoint outline",
  171. odp:"file powerpoint outline",
  172. jpg:"file image outline",
  173. png:"file image outline",
  174. jpeg:"file image outline",
  175. gif:"file image outline",
  176. odg:"file image outline",
  177. psd:"file image outline",
  178. zip:"file archive outline",
  179. '7z':"file archive outline",
  180. rar:"file archive outline",
  181. tar:"file archive outline",
  182. mp3:"file audio outline",
  183. m4a:"file audio outline",
  184. flac:"file audio outline",
  185. wav:"file audio outline",
  186. aac:"file audio outline",
  187. mp4:"file video outline",
  188. webm:"file video outline",
  189. php:"file code outline",
  190. html:"file code outline",
  191. htm:"file code outline",
  192. js:"file code outline",
  193. css:"file code outline",
  194. xml:"file code outline",
  195. json:"file code outline",
  196. csv:"file code outline",
  197. odf:"file code outline",
  198. bmp:"file image outline",
  199. rtf:"file text outline",
  200. wmv:"file video outline",
  201. mkv:"file video outline",
  202. ogg:"file audio outline",
  203. stl:"cube",
  204. obj:"cube",
  205. "3ds":"cube",
  206. fbx:"cube",
  207. collada:"cube",
  208. step:"cube",
  209. iges:"cube",
  210. gcode:"cube",
  211. shortcut:"external square",
  212. opus:"file audio outline"
  213. };
  214. var icon = "";
  215. if (ext == ""){
  216. icon = "folder outline";
  217. }else{
  218. icon = iconList[ext];
  219. if (icon == undefined){
  220. icon = "file outline"
  221. }
  222. }
  223. return icon;
  224. }
  225. </script>
  226. </body>
  227. </html>