slitaz-forge annotate mirror/floppies/format.js @ rev 716

mirror/floppies: multi-format support
author Pascal Bellard <pascal.bellard@slitaz.org>
date Fri Jul 23 16:41:12 2021 +0000 (2021-07-23)
parents
children 291e2d88bab3
rev   line source
pascal@716 1 window.URL = window.URL || window.webkitURL;
pascal@716 2 function download(ref, range, name) {
pascal@716 3 var xhr = new XMLHttpRequest();
pascal@716 4
pascal@716 5 xhr.open('GET', ref, true);
pascal@716 6 xhr.setRequestHeader("Range", "bytes="+range);
pascal@716 7 xhr.responseType = 'blob';
pascal@716 8 xhr.onload = function () {
pascal@716 9 var a = document.createElement('a'), file;
pascal@716 10 file = new Blob([xhr.response], { type : 'application/octet-stream' });
pascal@716 11 a.href = window.URL.createObjectURL(file);
pascal@716 12 a.download = name;
pascal@716 13 a.click();
pascal@716 14 };
pascal@716 15 xhr.send();
pascal@716 16 }
pascal@716 17
pascal@716 18 function format(size) {
pascal@716 19 var max = sets[sets.length-1];
pascal@716 20 var cols = Math.floor(Math.sqrt(max/size)+2);
pascal@716 21 var lines = Math.floor(((max/size)+1)/cols+1);
pascal@716 22 var e = document.getElementById('floppies');
pascal@716 23 var s, i, j, ofs, fd, fds, curset;
pascal@716 24 for (i = 0, ofs = 0, curset = 0, fd = 1, s = ""; i < lines; i++) {
pascal@716 25 s += "<tr>";
pascal@716 26 for (j = 0; j < cols; j++) {
pascal@716 27 fds = ""+fd; if (fd < 100) fds = "0"+fds; if (fd < 10) fds = "0"+fds;
pascal@716 28 s += "<td>";
pascal@716 29 if (ofs < max) {
pascal@716 30 s += "<a href=\"javascript:download('"+dir+"/fd.img', '"+ofs+"-";
pascal@716 31 ofs = Number.parseInt(ofs)+Number.parseInt(size);
pascal@716 32 s += (ofs-1)+"', 'fd"+fds+".img')\">fd"+fds+"</a>";
pascal@716 33 if (ofs >= sets[curset]) {
pascal@716 34 curset++;
pascal@716 35 fd = (Math.floor(fd/100)+1)*100;
pascal@716 36 } else fd++;
pascal@716 37 }
pascal@716 38 if (i == lines-1 && j == cols-1) {
pascal@716 39 s += "<a href=\""+dir+"/"+size+"/md5sum\">md5</a>"
pascal@716 40 }
pascal@716 41 s += "</td>";
pascal@716 42 }
pascal@716 43 s += "</tr>";
pascal@716 44 }
pascal@716 45 e.innerHTML = s;
pascal@716 46 for (i = 0, ofs = 0, curset = 0, fd = 0; ofs < max;) {
pascal@716 47 i++; fd++;
pascal@716 48 ofs = Number.parseInt(ofs)+Number.parseInt(size);
pascal@716 49 if (ofs >= sets[curset]) {
pascal@716 50 fds = ""+fd; if (fd < 100) fds = "0"+fds; if (fd < 10) fds = "0"+fds;
pascal@716 51 e = document.getElementById('cnt'+curset);
pascal@716 52 if (e) e.innerHTML = i;
pascal@716 53 e = document.getElementById('last'+curset);
pascal@716 54 if (e) e.innerHTML = fds;
pascal@716 55 curset++;
pascal@716 56 fd = (Math.floor(fd/100)+1)*100-1;
pascal@716 57 }
pascal@716 58 }
pascal@716 59 }
pascal@716 60
pascal@716 61 var e = document.getElementById('format');
pascal@716 62 try {
pascal@716 63 var dummy = new Blob();
pascal@716 64 e.innerHTML="<select onChange='format(this.value)' style='background: #666; color: #FFF;'>" +
pascal@716 65 "<option value='368640' title='/dev/fd0h360 (2,20) or /dev/fd0d360 (2,4) 5¼'>360K</option>" +
pascal@716 66 "<option value='737280' title='/dev/fd0u720 3½ DD (2,16)'>720K</option>" +
pascal@716 67 "<option value='819200' title='/dev/fd0u800 3½ DD (2,120)'>800K</option>" +
pascal@716 68 "<option value='1228800' title='/dev/fd0h1200 5¼ (2,8)'>1.2MB</option>" +
pascal@716 69 "<option value='1474560' title='/dev/fd0u1440 3½ HD (2,28) or /dev/fd0h1440 5¼ (2,40)' selected>1.44MB</option>" +
pascal@716 70 "<option value='1638400' title='/dev/fd0u1600 3½ HD (2,124) or /dev/fd0h1600 5¼ (2,92)'>1.60MB</option>" +
pascal@716 71 "<option value='1720320' title='/dev/fd0u1680 3½ HD (2,44)'>1.68MB</option>" +
pascal@716 72 "<option value='1966080' title='/dev/fd0u1920 3½ HD (2,100)'>1.92MB</option>" +
pascal@716 73 "<option value='2949120' title='/dev/fd0u2880 3½ ED (2,32)'>2.88MB</option>" +
pascal@716 74 "<option value='3932160' title='/dev/fd0u3840 3½ ED (2,112)'>3.84MB</option>" +
pascal@716 75 "</select>";
pascal@716 76 }
pascal@716 77 catch (err) {
pascal@716 78 e.innerHTML="1.44MB";
pascal@716 79 }