1 <!DOCTYPE html> 2 3 <html> 4 5 <head> 6 7 <script> 8 function addRow(name, url, isdir, size, date_modified) { 9 if (name == ".") 10 return; 11 12 var root = "" + document.location; 13 if (root.substr(-1) !== "/") 14 root += "/"; 15 16 var table = document.getElementById("table"); 17 var row = document.createElement("tr"); 18 var file_cell = document.createElement("td"); 19 var link = document.createElement("a"); 20 21 link.className = isdir ? "icon dir" : "icon file"; 22 23 if (name == "..") { 24 link.href = root + ".."; 25 link.innerText = document.getElementById("parentDirText").innerText; 26 link.className = "icon up"; 27 size = ""; 28 date_modified = ""; 29 } else { 30 if (isdir) { 31 name = name + "/"; 32 url = url + "/"; 33 size = ""; 34 } else { 35 link.draggable = "true"; 36 link.addEventListener("dragstart", onDragStart, false); 37 } 38 link.innerText = name; 39 link.href = root + url; 40 } 41 file_cell.appendChild(link); 42 43 row.appendChild(file_cell); 44 row.appendChild(createCell(size)); 45 row.appendChild(createCell(date_modified)); 46 47 table.appendChild(row); 48 } 49 50 function onDragStart(e) { 51 var el = e.srcElement; 52 var name = el.innerText.replace(":", ""); 53 var download_url_data = "application/octet-stream:" + name + ":" + el.href; 54 e.dataTransfer.setData("DownloadURL", download_url_data); 55 e.dataTransfer.effectAllowed = "copy"; 56 } 57 58 function createCell(text) { 59 var cell = document.createElement("td"); 60 cell.setAttribute("class", "detailsColumn"); 61 cell.innerText = text; 62 return cell; 63 } 64 65 function start(location) { 66 var header = document.getElementById("header"); 67 header.innerText = header.innerText.replace("LOCATION", location); 68 69 document.getElementById("title").innerText = header.innerText; 70 } 71 72 function onListingParsingError() { 73 var box = document.getElementById("listingParsingErrorBox"); 74 box.innerHTML = box.innerHTML.replace("LOCATION", encodeURI(document.location) 75 + "?raw"); 76 box.style.display = "block"; 77 } 78 </script> 79 80 <style> 81 82 h1 { 83 border-bottom: 1px solid #c0c0c0; 84 margin-bottom: 10px; 85 padding-bottom: 10px; 86 white-space: nowrap; 87 } 88 89 table { 90 border-collapse: collapse; 91 } 92 93 tr.header { 94 font-weight: bold; 95 } 96 97 td.detailsColumn { 98 padding-left: 2em; 99 text-align: right; 100 white-space: nowrap; 101 } 102 103 a.icon { 104 padding-left: 1.5em; 105 text-decoration: none; 106 } 107 108 a.icon:hover { 109 text-decoration: underline; 110 } 111 112 a.file { 113 background : url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABnRSTlMAAAAAAABupgeRAAABHUlEQVR42o2RMW7DIBiF3498iHRJD5JKHurL+CRVBp+i2T16tTynF2gO0KSb5ZrBBl4HHDBuK/WXACH4eO9/CAAAbdvijzLGNE1TVZXfZuHg6XCAQESAZXbOKaXO57eiKG6ft9PrKQIkCQqFoIiQFBGlFIB5nvM8t9aOX2Nd18oDzjnPgCDpn/BH4zh2XZdlWVmWiUK4IgCBoFMUz9eP6zRN75cLgEQhcmTQIbl72O0f9865qLAAsURAAgKBJKEtgLXWvyjLuFsThCSstb8rBCaAQhDYWgIZ7myM+TUBjDHrHlZcbMYYk34cN0YSLcgS+wL0fe9TXDMbY33fR2AYBvyQ8L0Gk8MwREBrTfKe4TpTzwhArXWi8HI84h/1DfwI5mhxJamFAAAAAElFTkSuQmCC ") left top no-repeat; 114 } 115 116 a.dir { 117 background : url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAd5JREFUeNqMU79rFUEQ/vbuodFEEkzAImBpkUabFP4ldpaJhZXYm/RiZWsv/hkWFglBUyTIgyAIIfgIRjHv3r39MePM7N3LcbxAFvZ2b2bn22/mm3XMjF+HL3YW7q28YSIw8mBKoBihhhgCsoORot9d3/ywg3YowMXwNde/PzGnk2vn6PitrT+/PGeNaecg4+qNY3D43vy16A5wDDd4Aqg/ngmrjl/GoN0U5V1QquHQG3q+TPDVhVwyBffcmQGJmSVfyZk7R3SngI4JKfwDJ2+05zIg8gbiereTZRHhJ5KCMOwDFLjhoBTn2g0ghagfKeIYJDPFyibJVBtTREwq60SpYvh5++PpwatHsxSm9QRLSQpEVSd7/TYJUb49TX7gztpjjEffnoVw66+Ytovs14Yp7HaKmUXeX9rKUoMoLNW3srqI5fWn8JejrVkK0QcrkFLOgS39yoKUQe292WJ1guUHG8K2o8K00oO1BTvXoW4yasclUTgZYJY9aFNfAThX5CZRmczAV52oAPoupHhWRIUUAOoyUIlYVaAa/VbLbyiZUiyFbjQFNwiZQSGl4IDy9sO5Wrty0QLKhdZPxmgGcDo8ejn+c/6eiK9poz15Kw7Dr/vN/z6W7q++091/AQYA5mZ8GYJ9K0AAAAAASUVORK5CYII= ") left top no-repeat; 118 } 119 120 a.up { 121 background : url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmlJREFUeNpsU0toU0EUPfPysx/tTxuDH9SCWhUDooIbd7oRUUTMouqi2iIoCO6lceHWhegy4EJFinWjrlQUpVm0IIoFpVDEIthm0dpikpf3ZuZ6Z94nrXhhMjM3c8895977BBHB2PznK8WPtDgyWH5q77cPH8PpdXuhpQT4ifR9u5sfJb1bmw6VivahATDrxcRZ2njfoaMv+2j7mLDn93MPiNRMvGbL18L9IpF8h9/TN+EYkMffSiOXJ5+hkD+PdqcLpICWHOHc2CC+LEyA/K+cKQMnlQHJX8wqYG3MAJy88Wa4OLDvEqAEOpJd0LxHIMdHBziowSwVlF8D6QaicK01krw/JynwcKoEwZczewroTvZirlKJs5CqQ5CG8pb57FnJUA0LYCXMX5fibd+p8LWDDemcPZbzQyjvH+Ki1TlIciElA7ghwLKV4kRZstt2sANWRjYTAGzuP2hXZFpJ/GsxgGJ0ox1aoFWsDXyyxqCs26+ydmagFN/rRjymJ1898bzGzmQE0HCZpmk5A0RFIv8Pn0WYPsiu6t/Rsj6PauVTwffTSzGAGZhUG2F06hEc9ibS7OPMNp6ErYFlKavo7MkhmTqCxZ/jwzGA9Hx82H2BZSw1NTN9Gx8ycHkajU/7M+jInsDC7DiaEmo1bNl1AMr9ASFgqVu9MCTIzoGUimXVAnnaN0PdBBDCCYbEtMk6wkpQwIG0sn0PQIUF4GsTwLSIFKNqF6DVrQq+IWVrQDxAYQC/1SsYOI4pOxKZrfifiUSbDUisif7XlpGIPufXd/uvdvZm760M0no1FZcnrzUdjw7au3vu/BVgAFLXeuTxhTXVAAAAAElFTkSuQmCC ") left top no-repeat; 122 } 123 124 #listingParsingErrorBox { 125 border: 1px solid black; 126 background: #fae691; 127 padding: 10px; 128 display: none; 129 } 130 </style> 131 132 <title id="title"></title> 133 134 </head> 135 136 <body> 137 138 <div id="listingParsingErrorBox" i18n-values=".innerHTML:listingParsingErrorBoxText"></div> 139 140 <span id="parentDirText" style="display:none" i18n-content="parentDirText"></span> 141 142 <h1 id="header" i18n-content="header"></h1> 143 144 <table id="table"> 145 <tr class="header"> 146 <td i18n-content="headerName"></td> 147 <td class="detailsColumn" i18n-content="headerSize"></td> 148 <td class="detailsColumn" i18n-content="headerDateModified"></td> 149 </tr> 150 </table> 151 152 </body> 153 154 </html> 155