disks.html 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <div class="ts-content">
  2. <div class="ts-container is-padded">
  3. <div id="disk-list">
  4. <div class="ts-box ts-content disk-info">
  5. <span class="ts-icon is-spinning is-circle-notch-icon"></span>
  6. <span class="has-start-padded-small" i18n>
  7. Loading...
  8. </span>
  9. </div>
  10. </div>
  11. <div class="ts-wrap is-end-aligned">
  12. <button id="refresh_disk_list_btn" class="ts-button is-start-icon has-top-spaced-large" >
  13. <span class="ts-icon is-rotate-icon"></span>
  14. <span i18n>
  15. Refresh
  16. // 重新整理
  17. </button>
  18. </div>
  19. </div>
  20. </div>
  21. <script>
  22. function humanFileSize(size) {
  23. var i = size == 0 ? 0 : Math.floor(Math.log(size) / Math.log(1024));
  24. return +((size / Math.pow(1024, i)).toFixed(1)) * 1 + ' ' + ['B', 'kB', 'MB', 'GB', 'TB'][i];
  25. }
  26. $("#refresh_disk_list_btn").click(function(){
  27. $("#disk-list").html("");
  28. loadDiskInfo();
  29. msgbox(i18nc('disk_info_refreshed'));
  30. });
  31. function loadDiskInfo(){
  32. $.get("./api/info/list", function(data){
  33. if (data) {
  34. var disks = data;
  35. var diskList = $("#disk-list");
  36. diskList.empty();
  37. for (var i = 0; i < disks.length; i++) {
  38. let disk = disks[i];
  39. let partitionDOM = "";
  40. let partitionTabs = "";
  41. //Render the partition tabs
  42. for (var j = 0; j < disk.partitions.length; j++) {
  43. let partition = disk.partitions[j];
  44. partitionTabs += `<a class="item ${j==0?"is-active":""}" data-tab="diskinfo_partition_${partition.name}">${partition.name}</a>`;
  45. }
  46. //Render the partition dom elements
  47. for (var j = 0; j < disk.partitions.length; j++) {
  48. let partition = disk.partitions[j];
  49. partitionDOM += `<div id="diskinfo_partition_${partition.name}" class="ts-box has-top-spaced-small">
  50. <div class="ts-content">
  51. <div class="ts-header">${partition.name}</div>
  52. <div class="ts-grid mobile:is-stacked">
  53. <div class="column is-fluid">
  54. <div class="ts-text is-description has-top-spaced-small">
  55. UUID: ${partition.uuid} <br>
  56. PartUUID: ${partition.partuuid} <br>
  57. PartLabel: ${partition.partlabel} <br>
  58. Path: ${partition.path} <br>
  59. Block Size: ${partition.blocksize} <br>
  60. Block Type: ${partition.blocktype} <br>
  61. File System Type: ${partition.fstype} <br>
  62. Mount Point: ${partition.mountpoint==undefined?"":partition.mountpoint} <br>
  63. </div>
  64. </div>
  65. <div class="column is-6-wide">
  66. <div class="ts-wrap is-middle-aligned has-top-spaced-small">
  67. <div class="ts-gauge is-small is-circular">
  68. <div class="bar" style="--value: ${parseInt(partition.used / partition.size * 100)}">
  69. <div class="text">${parseInt(partition.used / partition.size * 100)}%</div>
  70. </div>
  71. </div>
  72. <div>
  73. <div class="ts-text is-bold" i18n>
  74. Used Space
  75. // 已使用空間
  76. </div>
  77. ${humanFileSize(partition.used)} / ${humanFileSize(partition.size)}
  78. </div>
  79. </div>
  80. </div>
  81. </div>
  82. </div>
  83. </div>`;
  84. }
  85. if (disk.partitions.length == 0){
  86. partitionTabs = `<a class="item is-disabled" i18n>
  87. No Partitions
  88. // 無分割區
  89. </a>`;
  90. }
  91. $(diskList).append(`<div class="ts-box ts-content has-top-spaced-small disk-info">
  92. <div class="ts-grid mobile:is-stacked">
  93. <div class="column is-fluid">
  94. <div class="ts-item">
  95. <div class="ts-header">${disk.model}</div>
  96. <div class="ts-text is-description has-top-spaced-small">
  97. ${disk.identifier}
  98. </div>
  99. <span>/dev/${disk.name}</span>
  100. </div>
  101. </div>
  102. <div class="column is-6-wide">
  103. <div class="ts-wrap is-middle-aligned has-top-spaced-small">
  104. <div class="ts-gauge is-small is-circular">
  105. <div class="bar" style="--value: ${parseInt(disk.used / disk.size * 100)}">
  106. <div class="text">${parseInt(disk.used / disk.size * 100)}%</div>
  107. </div>
  108. </div>
  109. <div>
  110. <div class="ts-text is-bold" i18n>
  111. Total Space Used
  112. // 總空間使用率
  113. </div>
  114. ${humanFileSize(disk.used)} / ${humanFileSize(disk.size)}
  115. </div>
  116. </div>
  117. </div>
  118. </div>
  119. <div class="has-top-spaced-big">
  120. <div class="ts-tab is-segmented">
  121. ${partitionTabs}
  122. </div>
  123. ${partitionDOM}
  124. </div>
  125. </div>`);
  126. }
  127. relocale();
  128. } else {
  129. console.error("Failed to load disk info: " + data.message);
  130. }
  131. });
  132. }
  133. loadDiskInfo();
  134. </script>