dir_header.html 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. <!DOCTYPE html>
  2. <html dir="$i18n{textdirection}" lang="$i18n{language}">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="color-scheme" content="light dark">
  6. <meta name="google" value="notranslate">
  7. <script>
  8. function addRow(name, url, isdir,
  9. size, size_string, date_modified, date_modified_string) {
  10. if (name == "." || name == "..")
  11. return;
  12. var root = document.location.pathname;
  13. if (root.substr(-1) !== "/")
  14. root += "/";
  15. var tbody = document.getElementById("tbody");
  16. var row = document.createElement("tr");
  17. var file_cell = document.createElement("td");
  18. var link = document.createElement("a");
  19. link.className = isdir ? "icon dir" : "icon file";
  20. if (isdir) {
  21. name = name + "/";
  22. url = url + "/";
  23. size = 0;
  24. size_string = "";
  25. } else {
  26. link.draggable = "true";
  27. link.addEventListener("dragstart", onDragStart, false);
  28. }
  29. link.innerText = name;
  30. link.href = root + url;
  31. file_cell.dataset.value = name;
  32. file_cell.appendChild(link);
  33. row.appendChild(file_cell);
  34. row.appendChild(createCell(size, size_string));
  35. row.appendChild(createCell(date_modified, date_modified_string));
  36. tbody.appendChild(row);
  37. }
  38. function onDragStart(e) {
  39. var el = e.srcElement;
  40. var name = el.innerText.replace(":", "");
  41. var download_url_data = "application/octet-stream:" + name + ":" + el.href;
  42. e.dataTransfer.setData("DownloadURL", download_url_data);
  43. e.dataTransfer.effectAllowed = "copy";
  44. }
  45. function createCell(value, text) {
  46. var cell = document.createElement("td");
  47. cell.setAttribute("class", "detailsColumn");
  48. cell.dataset.value = value;
  49. cell.innerText = text;
  50. return cell;
  51. }
  52. function start(location) {
  53. var header = document.getElementById("header");
  54. header.innerText = header.innerText.replace("LOCATION", location);
  55. document.getElementById("title").innerText = header.innerText;
  56. }
  57. function onHasParentDirectory() {
  58. var box = document.getElementById("parentDirLinkBox");
  59. box.style.display = "block";
  60. var root = document.location.pathname;
  61. if (!root.endsWith("/"))
  62. root += "/";
  63. var link = document.getElementById("parentDirLink");
  64. link.href = root + "..";
  65. }
  66. function sortTable(column) {
  67. var theader = document.getElementById("theader");
  68. var oldOrder = theader.cells[column].dataset.order || '1';
  69. oldOrder = parseInt(oldOrder, 10)
  70. var newOrder = 0 - oldOrder;
  71. theader.cells[column].dataset.order = newOrder;
  72. var tbody = document.getElementById("tbody");
  73. var rows = tbody.rows;
  74. var list = [], i;
  75. for (i = 0; i < rows.length; i++) {
  76. list.push(rows[i]);
  77. }
  78. list.sort(function(row1, row2) {
  79. var a = row1.cells[column].dataset.value;
  80. var b = row2.cells[column].dataset.value;
  81. if (column) {
  82. a = parseInt(a, 10);
  83. b = parseInt(b, 10);
  84. return a > b ? newOrder : a < b ? oldOrder : 0;
  85. }
  86. // Column 0 is text.
  87. if (a > b)
  88. return newOrder;
  89. if (a < b)
  90. return oldOrder;
  91. return 0;
  92. });
  93. // Appending an existing child again just moves it.
  94. for (i = 0; i < list.length; i++) {
  95. tbody.appendChild(list[i]);
  96. }
  97. }
  98. // Add event handlers to column headers.
  99. function addHandlers(element, column) {
  100. element.onclick = (e) => sortTable(column);
  101. element.onkeydown = (e) => {
  102. if (e.key == 'Enter' || e.key == ' ') {
  103. sortTable(column);
  104. e.preventDefault();
  105. }
  106. };
  107. }
  108. function onLoad() {
  109. addHandlers(document.getElementById('nameColumnHeader'), 0);
  110. addHandlers(document.getElementById('sizeColumnHeader'), 1);
  111. addHandlers(document.getElementById('dateColumnHeader'), 2);
  112. }
  113. window.addEventListener('DOMContentLoaded', onLoad);
  114. </script>
  115. <style>
  116. h1 {
  117. border-bottom: 1px solid #c0c0c0;
  118. margin-bottom: 10px;
  119. padding-bottom: 10px;
  120. white-space: nowrap;
  121. }
  122. table {
  123. border-collapse: collapse;
  124. }
  125. th {
  126. cursor: pointer;
  127. }
  128. td.detailsColumn {
  129. padding-inline-start: 2em;
  130. text-align: end;
  131. white-space: nowrap;
  132. }
  133. a.icon {
  134. padding-inline-start: 1.5em;
  135. text-decoration: none;
  136. user-select: auto;
  137. }
  138. a.icon:hover {
  139. text-decoration: underline;
  140. }
  141. a.file {
  142. background : url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABnRSTlMAAAAAAABupgeRAAABEElEQVR42nRRx3HDMBC846AHZ7sP54BmWAyrsP588qnwlhqw/k4v5ZwWxM1hzmGRgV1cYqrRarXoH2w2m6qqiqKIR6cPtzc3xMSML2Te7XZZlnW7Pe/91/dX47WRBHuA9oyGmRknzGDjab1ePzw8bLfb6WRalmW4ip9FDVpYSWZgOp12Oh3nXJ7nxoJSGEciteP9y+fH52q1euv38WosqA6T2gGOT44vry7BEQtJkMAMMpa6JagAMcUfWYa4hkkzAc7fFlSjwqCoOUYAF5RjHZPVCFBOtSBGfgUDji3c3jpibeEMQhIMh8NwshqyRsBJgvF4jMs/YlVR5KhgNpuBLzk0OcUiR3CMhcPaOzsZiAAA/AjmaB3WZIkAAAAASUVORK5CYII=") left top no-repeat;
  143. }
  144. a.dir {
  145. background : url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABt0lEQVR42oxStZoWQRCs2cXdHTLcHZ6EjAwnQWIkJyQlRt4Cd3d3d1n5d7q7ju1zv/q+mh6taQsk8fn29kPDRo87SDMQcNAUJgIQkBjdAoRKdXjm2mOH0AqS+PlkP8sfp0h93iu/PDji9s2FzSSJVg5ykZqWgfGRr9rAAAQiDFoB1OfyESZEB7iAI0lHwLREQBcQQKqo8p+gNUCguwCNAAUQAcFOb0NNGjT+BbUC2YsHZpWLhC6/m0chqIoM1LKbQIIBwlTQE1xAo9QDGDPYf6rkTpPc92gCUYVJAZjhyZltJ95f3zuvLYRGWWCUNkDL2333McBh4kaLlxg+aTmyL7c2xTjkN4Bt7oE3DBP/3SRz65R/bkmBRPGzcRNHYuzMjaj+fdnaFoJUEdTSXfaHbe7XNnMPyqryPcmfY+zURaAB7SHk9cXSH4fQ5rojgCAVIuqCNWgRhLYLhJB4k3iZfIPtnQiCpjAzeBIRXMA6emAqoEbQSoDdGxFUrxS1AYcpaNbBgyQBGJEOnYOeENKR/iAd1npusI4C75/c3539+nbUjOgZV5CkAU27df40lH+agUdIuA/EAgDmZnwZlhDc0wAAAABJRU5ErkJggg==") left top no-repeat;
  146. }
  147. a.up {
  148. background : url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACM0lEQVR42myTA+w1RxRHz+zftmrbdlTbtq04qRGrCmvbDWp9tq3a7tPcub8mj9XZ3eHOGQdJAHw77/LbZuvnWy+c/CIAd+91CMf3bo+bgcBiBAGIZKXb19/zodsAkFT+3px+ssYfyHTQW5tr05dCOf3xN49KaVX9+2zy1dX4XMk+5JflN5MBPL30oVsvnvEyp+18Nt3ZAErQMSFOfelCFvw0HcUloDayljZkX+MmamTAMTe+d+ltZ+1wEaRAX/MAnkJdcujzZyErIiVSzCEvIiq4O83AG7LAkwsfIgAnbncag82jfPPdd9RQyhPkpNJvKJWQBKlYFmQA315n4YPNjwMAZYy0TgAweedLmLzTJSTLIxkWDaVCVfAbbiKjytgmm+EGpMBYW0WwwbZ7lL8anox/UxekaOW544HO0ANAshxuORT/RG5YSrjlwZ3lM955tlQqbtVMlWIhjwzkAVFB8Q9EAAA3AFJ+DR3DO/Pnd3NPi7H117rAzWjpEs8vfIqsGZpaweOfEAAFJKuM0v6kf2iC5pZ9+fmLSZfWBVaKfLLNOXj6lYY0V2lfyVCIsVzmcRV9Y0fx02eTaEwhl2PDrXcjFdYRAohQmS8QEFLCLKGYA0AeEakhCCFDXqxsE0AQACgAQp5w96o0lAXuNASeDKWIvADiHwigfBINpWKtAXJvCEKWgSJNbRvxf4SmrnKDpvZavePu1K/zu/due1X/6Nj90MBd/J2Cic7WjBp/jUdIuA8AUtd65M+PzXIAAAAASUVORK5CYII=") left top no-repeat;
  149. }
  150. html[dir=rtl] a {
  151. background-position-x: right;
  152. }
  153. #parentDirLinkBox {
  154. margin-bottom: 10px;
  155. padding-bottom: 10px;
  156. }
  157. </style>
  158. <title id="title"></title>
  159. </head>
  160. <body>
  161. <h1 id="header">$i18n{header}</h1>
  162. <div id="parentDirLinkBox" style="display:none">
  163. <a id="parentDirLink" class="icon up">
  164. <span id="parentDirText">$i18n{parentDirText}</span>
  165. </a>
  166. </div>
  167. <table>
  168. <thead>
  169. <tr class="header" id="theader">
  170. <th id="nameColumnHeader" tabindex=0 role="button">$i18n{headerName}</th>
  171. <th id="sizeColumnHeader" class="detailsColumn" tabindex=0 role="button">
  172. $i18n{headerSize}
  173. </th>
  174. <th id="dateColumnHeader" class="detailsColumn" tabindex=0 role="button">
  175. $i18n{headerDateModified}
  176. </th>
  177. </tr>
  178. </thead>
  179. <tbody id="tbody">
  180. </tbody>
  181. </table>
  182. </body>
  183. </html>