Sort disk names case-insensitively
This commit is contained in:
parent
af7f618821
commit
f94409d754
9 changed files with 22 additions and 16 deletions
|
|
@ -13,7 +13,7 @@
|
|||
<license href="http://www.bricklin.com/history/vclicense.htm">Lotus Development</license>
|
||||
<machine href="/devices/pc/machine/5150/mda/64kb/machine.xml" state="/apps/pc/1981/visicalc/state.json"/>
|
||||
<disk id="disk01" size="163840" chs="40:1:8" dir="archive/" href="/apps/pc/1981/visicalc/disk.json" md5="61494f998d5fb0e31e7b8bd99f1cc588" md5json="3ad82ed815725e6bd786f92a4714e84f">
|
||||
<name>Demo: VisiCalc</name>
|
||||
<name>Demo: VisiCalc (1981)</name>
|
||||
<file size="27520" time="1981-12-16 23:00:00" attr="0x20" md5="28997dfedb2440c6054d8be835be8634">VC.COM</file>
|
||||
<file dir="../">README.md</file>
|
||||
<link href="http://www.bricklin.com/history/vclicense.htm">VisiCalc License</link>
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
<company>Living Videotext</company>
|
||||
<releaseDate>September 25, 1987</releaseDate>
|
||||
<disk id="disk01" size="368640" chs="40:2:9" dir="archive/" href="/apps/pc/1987/thinktank/disk.json" md5="94053339672452fba42da85481893d68" md5json="bd39020bff244db9af3ac9eb656e7878">
|
||||
<name>Demo: ThinkTank 2.41NP</name>
|
||||
<name>Demo: ThinkTank (1987)</name>
|
||||
<file size="6" time="2012-11-20 15:29:40" attr="0x20" md5="50b68f3f99eda119c661b2b50cb9f4de">AUTOEXEC.BAT</file>
|
||||
<file size="8192" time="2012-11-20 15:29:35" attr="0x20" md5="3355afbc122700f13647ee0d1bbf9ed7">READ_ME.DB</file>
|
||||
<file size="512" time="2012-11-20 15:29:31" attr="0x20" md5="8b989397eb275032eb8cf929def9c6cc">READ_ME.SAV</file>
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
<desc>MSDOS port</desc>
|
||||
</author>
|
||||
<disk id="disk01" size="1228800" chs="80:2:15" dir="archive/" href="/apps/pc/1988/moria/disk.json" md5="7bb84a7ac4e9b03e8cd1e6753b1359fb" md5json="7630122397a57af2d0c767141af3817c">
|
||||
<name>Demo: Moria v4.872</name>
|
||||
<name>Demo: Moria 4.872 (1988)</name>
|
||||
<file size="11143" time="1988-11-01 00:00:00" attr="0x20" md5="dae278b77133f32949d0e8940f944c0d">CONFIG.DOC</file>
|
||||
<file size="91154" time="1991-06-01 14:50:02" attr="0x20" md5="66593e83a2aa3870d7a9e8b43079ce42">GOD</file>
|
||||
<file size="91154" time="1991-06-01 15:13:50" attr="0x20" md5="4a7c6e2ddf649f9700786624aaa91199">MADNESS1</file>
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@
|
|||
<desc>Macintosh port for Think C</desc>
|
||||
</contributor>
|
||||
<disk id="disk01" size="368640" chs="40:2:9" dir="archive/bin/" href="/apps/pc/1992/moria/disk.json" md5="da0023280238bc2ee9053ad2b9548816" md5json="1473be159bb5f9001db31c06b3a366c1">
|
||||
<name>Demo: Moria 5.5</name>
|
||||
<name>Demo: Moria 5.5 (1992)</name>
|
||||
<file size="6074" time="1992-11-01 23:15:36" attr="0x20" md5="078aca44b845ee8a787a324c1e827200">EXP.DOC</file>
|
||||
<file size="2560" time="1992-11-01 23:15:36" attr="0x20" md5="a5c8620efd0dc841956f9cdc2e46220a">MORIA.CNF</file>
|
||||
<file size="49267" time="1992-11-01 23:15:36" attr="0x20" md5="32c9f15c70256f540f531675ad0e217f">MORIA1.TXT</file>
|
||||
|
|
|
|||
|
|
@ -502,11 +502,11 @@
|
|||
<disk path="/disks/pc/games/id/wolf3d/1WOLF14.json">Wolfenstein 3D 1.4</disk>
|
||||
<disk path="/disks/pc/games/microsoft/flightsim/1982/FLIGHTSIM-1982.json">MS Flight Simulator (1982)</disk>
|
||||
<disk path="/disks/pc/games/microsoft/flightsim/1984/FLIGHTSIM-1984.json">MS Flight Simulator (1984)</disk>
|
||||
<disk path="/apps/pc/1981/visicalc/disk.json">Demo: VisiCalc</disk>
|
||||
<disk path="/apps/pc/1981/visicalc/disk.json">Demo: VisiCalc (1981)</disk>
|
||||
<disk path="/apps/pc/1982/esuite/disk.json">Demo: Executive Suite (1982)</disk>
|
||||
<disk path="/apps/pc/1985/rogue/disk.json">Demo: Rogue (1985)</disk>
|
||||
<disk path="/apps/pc/1987/thinktank/disk.json">Demo: ThinkTank 2.41NP</disk>
|
||||
<disk path="/apps/pc/1992/moria/disk.json">Demo: Moria 5.5</disk>
|
||||
<disk path="/apps/pc/1987/thinktank/disk.json">Demo: ThinkTank (1987)</disk>
|
||||
<disk path="/apps/pc/1992/moria/disk.json">Demo: Moria 5.5 (1992)</disk>
|
||||
<disk path="/pubs/pc/programming/DOS_Internals/DOS-INTERN.json">DOS Internals</disk>
|
||||
<disk path="/pubs/pc/programming/The_Undocumented_PC/UNDOC.json">The Undocumented PC</disk>
|
||||
<disk path="/pubs/pc/programming/Undocumented_DOS/UNDOC-DOS-DISK1.json">Undocumented DOS (Disk 1)</disk>
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
<disk path="/disks/pc/dos/ibm/2.00/PCDOS200-DISK1.json">PC-DOS 2.00 (Disk 1)</disk>
|
||||
<disk path="/disks/pc/dos/ibm/2.00/PCDOS200-DISK2.json">PC-DOS 2.00 (Disk 2)</disk>
|
||||
<disk path="/disks/pc/games/microsoft/adventure/ADVENTURE-1981.json">Microsoft Adventure</disk>
|
||||
<disk path="/apps/pc/1981/visicalc/disk.json">Demo: VisiCalc</disk>
|
||||
<disk path="/apps/pc/1981/visicalc/disk.json">Demo: VisiCalc (1981)</disk>
|
||||
</control>
|
||||
<control type="button" binding="loadDrive">Load</control>
|
||||
<control type="button" binding="saveDrive" padright="8px">Save</control>
|
||||
|
|
|
|||
|
|
@ -594,9 +594,9 @@ b+" changes applied)";b=-1;break}if(this.ef){c="unable to modify write-protected
|
|||
m.toJSON=function(){var a;a=0;for(var b;b=Yo(this,a++);)qp(b);a=JSON.stringify(this.A,function(a,b){return"file"==a?void 0:b});a=a.replace(/,"length":512/gm,"").replace(/,"pattern":0/gm,"");a=a.replace(/"(sector|length|data|pattern)":/gm,"$1:");a=a.replace(/,"[^"]*":([0-9]+|true|false)/gm,"");a=a.replace(/(sector|length|data|pattern):/gm,'"$1":');return a=a.replace(/([\]}]),/gm,"$1,\n")};
|
||||
function qp(a){var b=a.data,c=b.length;if(c<<2==a.length){for(var d=c-1,e=b[d],f=0;d--&&b[d]===e;)f++;f++&&(b.length=c-f,a.pattern=e)}}function rp(a){Ua.call(this,"FDC",a,rp,524288);this.dmaRead=this.wk;this.dmaWrite=this.xk;this.dmaFormat=this.Lk;this.U=a.autoMount||null;this.ga=a.sortBy||"name";"none"==this.ga&&(this.ga=null);this.B=[];this.ja=!Ga("Mobi")&&window&&"FileReader"in window}db(rp);aa={};
|
||||
var sp={3:{Vd:3,ie:0,name:aa.Zn},4:{Vd:2,ie:1,name:aa.Xn},5:{Vd:9,ie:7,name:aa.io},6:{Vd:9,ie:7,name:aa.Sn},7:{Vd:2,ie:0,name:aa.Un},8:{Vd:1,ie:2,name:aa.Yn},10:{Vd:2,ie:7,name:aa.Tn},13:{Vd:6,ie:7,name:aa.En},15:{Vd:3,ie:0,name:aa.Wn}};m=rp.prototype;
|
||||
m.Qb=function(a,b,c){var d=this;switch(b){case "listDisks":this.qa[b]=c;if(this.ga){b=[];for(a=0;a<c.options.length;a++)b.push(c.options[a]);b.sort(function(a,b){return"path"!=d.ga?a.text>b.text?1:a.text<b.text?-1:0:a.value>b.value?1:a.value<b.value?-1:0});for(a=0;a<b.length;a++)c.options[a]=b[a]}c.onchange=function(){var a=d.qa.descDisk,b=c.options[c.selectedIndex];if(a&&b){var g={};if(b=b.getAttribute("data-value"))try{g=eval("("+b+")")}catch(h){w("FDC option error: "+h.message)}b=g.desc;void 0===
|
||||
b&&(b="");g=g.href;void 0!==g&&(b='<a href="'+g+'" target="_blank">'+b+"</a>");a.innerHTML=b}};return!0;case "descDisk":case "listDrives":return this.qa[b]=c,c.onchange=function(){var a=ca(c.value,10);null!=a&&tp(d,a)},!0;case "loadDrive":return this.qa[b]=c,c.onclick=function(){var a=d.qa.listDisks;a&&up(d,a.options[a.selectedIndex].text,a.value)},!0;case "saveDrive":if(!this.ja){c.parentNode.removeChild(c);break}this.qa[b]=c;c.onclick=function(){var a=d.qa.listDrives;a&&a.options&&d.A&&(a=ca(a.value,
|
||||
10),(a=d.A[a])?(a=a.za)?(a=Ia(pp(a),"octet-stream",!0,a.Ng.replace(".json",".img")),w(a)):d.Na("No diskette loaded in drive."):d.Na("No diskette drive selected."))};return!0;case "mountDrive":if(!this.ja){c.parentNode.removeChild(c);break}this.qa[b]=c;c.addEventListener("change",function(){var a=c.children[0];a.children[1].disabled=!a.children[0].files.length});c.onsubmit=function(a){if(a=a.currentTarget[1].files[0]){var b=a.name;up(d,fa(b,!0),b,a)}return!1};return!0}return!1};
|
||||
m.Qb=function(a,b,c){var d=this;switch(b){case "listDisks":this.qa[b]=c;if(this.ga){b=[];for(a=0;a<c.options.length;a++)b.push(c.options[a]);b.sort(function(a,b){return"path"!=d.ga?a.text.localeCompare(b.text):a.value.localeCompare(b.value)});for(a=0;a<b.length;a++)c.options[a]=b[a]}c.onchange=function(){var a=d.qa.descDisk,b=c.options[c.selectedIndex];if(a&&b){var g={};if(b=b.getAttribute("data-value"))try{g=eval("("+b+")")}catch(h){w("FDC option error: "+h.message)}b=g.desc;void 0===b&&(b="");g=
|
||||
g.href;void 0!==g&&(b='<a href="'+g+'" target="_blank">'+b+"</a>");a.innerHTML=b}};return!0;case "descDisk":case "listDrives":return this.qa[b]=c,c.onchange=function(){var a=ca(c.value,10);null!=a&&tp(d,a)},!0;case "loadDrive":return this.qa[b]=c,c.onclick=function(){var a=d.qa.listDisks;a&&up(d,a.options[a.selectedIndex].text,a.value)},!0;case "saveDrive":if(!this.ja){c.parentNode.removeChild(c);break}this.qa[b]=c;c.onclick=function(){var a=d.qa.listDrives;a&&a.options&&d.A&&(a=ca(a.value,10),(a=
|
||||
d.A[a])?(a=a.za)?(a=Ia(pp(a),"octet-stream",!0,a.Ng.replace(".json",".img")),w(a)):d.Na("No diskette loaded in drive."):d.Na("No diskette drive selected."))};return!0;case "mountDrive":if(!this.ja){c.parentNode.removeChild(c);break}this.qa[b]=c;c.addEventListener("change",function(){var a=c.children[0];a.children[1].disabled=!a.children[0].files.length});c.onsubmit=function(a){if(a=a.currentTarget[1].files[0]){var b=a.name;up(d,fa(b,!0),b,a)}return!1};return!0}return!1};
|
||||
m.Ic=function(a,b,c,d){this.ea=b;this.F=c;this.ha=d;this.V=a;this.N=Eb(a,"ChipSet");if((this.U=Nc(this.V,"autoMount")||this.U)&&"string"==typeof this.U)try{this.U=eval("("+this.U+")")}catch(e){w("FDC auto-mount error: "+e.message+" ("+this.U+")"),this.U=null}vp(this);hc(b,this,wp);lc(b,this,xp);yp(this,"None","",!0);this.ja&&yp(this,"Local Disk","?");yp(this,"Remote Disk","??");zp(this)||rb(this)};
|
||||
m.ic=function(a,b){if(!b){if(!a||!this.restore){if(this.reset(),this.V.dh){this.B=[];for(var c=0;c<this.A.length;c++)Ap(this,c,!0);zp(this,!0)}}else if(!this.restore(a))return!1;if(c=this.qa.listDrives){for(;c.firstChild;)c.removeChild(c.firstChild);c.value="";for(var d=0;d<this.ka;d++){var e=document.createElement("option");e.value=d;e.text=String.fromCharCode(65+d)+":";c.appendChild(e)}0<this.ka&&(c.value="0",tp(this,0))}}return!0};m.hc=function(a){return a?this.save():!0};m.reset=function(){vp(this)};
|
||||
m.save=function(){var a=new hf(this),b=0,c=[];c[b++]=this.hb;c[b++]=0;c[b++]=this.ma;c[b++]=this.W;c[b++]=this.L;c[b++]=this.C;c[b++]=this.aa;for(var d=b++,e=0,f=[],g=0;g<this.A.length;g++){var h=e++,k=this.A[g],l=0,n=[];n[l++]=k.Cb;n[l++]=[k.name,k.Bb,k.ub,k.lb,k.Va,k.bf,k.zg,k.Nf,k.Of];n[l++]=k.kb;n[l++]=k.ge+100;n[l++]=k.Rb;n[l++]=k.xb;n[l++]=k.he;n[l++]=k.Hb;n[l++]=k.eb;n[l++]=k.$e;n[l++]=k.kk;n[l]=k.Le;f[h]=n}c[d]=f;d=b++;for(e=0;e<this.A.length;e++)f=this.A[e],f.za&&Bp(this,f.Le,f.za);c[d]=
|
||||
|
|
|
|||
|
|
@ -543,9 +543,9 @@ b+" changes applied)";b=-1;break}if(this.re){c="unable to modify write-protected
|
|||
l.toJSON=function(){var a;a=0;for(var b;b=im(this,a++);)qm(b);a=JSON.stringify(this.A,function(a,b){return"file"==a?void 0:b});a=a.replace(/,"length":512/gm,"").replace(/,"pattern":0/gm,"");a=a.replace(/"(sector|length|data|pattern)":/gm,"$1:");a=a.replace(/,"[^"]*":([0-9]+|true|false)/gm,"");a=a.replace(/(sector|length|data|pattern):/gm,'"$1":');return a=a.replace(/([\]}]),/gm,"$1,\n")};
|
||||
function qm(a){var b=a.data,c=b.length;if(c<<2==a.length){for(var d=c-1,e=b[d],f=0;d--&&b[d]===e;)f++;f++&&(b.length=c-f,a.pattern=e)}}function rm(a){Ia.call(this,"FDC",a,rm);this.dmaRead=this.qj;this.dmaWrite=this.rj;this.dmaFormat=this.Cj;this.K=a.autoMount||null;this.W=a.sortBy||"name";"none"==this.W&&(this.W=null);this.C=[];this.Y=!ya("Mobi")&&window&&"FileReader"in window}Qa(rm);aa={};
|
||||
var sm={3:{jd:3,yd:0,name:aa.Fm},4:{jd:2,yd:1,name:aa.Dm},5:{jd:9,yd:7,name:aa.Nm},6:{jd:9,yd:7,name:aa.ym},7:{jd:2,yd:0,name:aa.Am},8:{jd:1,yd:2,name:aa.Em},10:{jd:2,yd:7,name:aa.zm},13:{jd:6,yd:7,name:aa.km},15:{jd:3,yd:0,name:aa.Cm}};l=rm.prototype;
|
||||
l.zb=function(a,b,c){var d=this;switch(b){case "listDisks":this.ka[b]=c;if(this.W){b=[];for(a=0;a<c.options.length;a++)b.push(c.options[a]);b.sort(function(a,b){return"path"!=d.W?a.text>b.text?1:a.text<b.text?-1:0:a.value>b.value?1:a.value<b.value?-1:0});for(a=0;a<b.length;a++)c.options[a]=b[a]}c.onchange=function(){var a=d.ka.descDisk,b=c.options[c.selectedIndex];if(a&&b){var g={};if(b=b.getAttribute("data-value"))try{g=eval("("+b+")")}catch(h){n("FDC option error: "+h.message)}b=g.desc;void 0===
|
||||
b&&(b="");g=g.href;void 0!==g&&(b='<a href="'+g+'" target="_blank">'+b+"</a>");a.innerHTML=b}};return!0;case "descDisk":case "listDrives":return this.ka[b]=c,c.onchange=function(){var a=ca(c.value,10);null!=a&&tm(d,a)},!0;case "loadDrive":return this.ka[b]=c,c.onclick=function(){var a=d.ka.listDisks;a&&um(d,a.options[a.selectedIndex].text,a.value)},!0;case "saveDrive":if(!this.Y){c.parentNode.removeChild(c);break}this.ka[b]=c;c.onclick=function(){var a=d.ka.listDrives;a&&a.options&&d.B&&(a=ca(a.value,
|
||||
10),(a=d.B[a])?(a=a.ta)?(a=za(pm(a),"octet-stream",!0,a.nh.replace(".json",".img")),n(a)):d.Ba("No diskette loaded in drive."):d.Ba("No diskette drive selected."))};return!0;case "mountDrive":if(!this.Y){c.parentNode.removeChild(c);break}this.ka[b]=c;c.addEventListener("change",function(){var a=c.children[0];a.children[1].disabled=!a.children[0].files.length});c.onsubmit=function(a){if(a=a.currentTarget[1].files[0]){var b=a.name;um(d,fa(b,!0),b,a)}return!1};return!0}return!1};
|
||||
l.zb=function(a,b,c){var d=this;switch(b){case "listDisks":this.ka[b]=c;if(this.W){b=[];for(a=0;a<c.options.length;a++)b.push(c.options[a]);b.sort(function(a,b){return"path"!=d.W?a.text.localeCompare(b.text):a.value.localeCompare(b.value)});for(a=0;a<b.length;a++)c.options[a]=b[a]}c.onchange=function(){var a=d.ka.descDisk,b=c.options[c.selectedIndex];if(a&&b){var g={};if(b=b.getAttribute("data-value"))try{g=eval("("+b+")")}catch(h){n("FDC option error: "+h.message)}b=g.desc;void 0===b&&(b="");g=g.href;
|
||||
void 0!==g&&(b='<a href="'+g+'" target="_blank">'+b+"</a>");a.innerHTML=b}};return!0;case "descDisk":case "listDrives":return this.ka[b]=c,c.onchange=function(){var a=ca(c.value,10);null!=a&&tm(d,a)},!0;case "loadDrive":return this.ka[b]=c,c.onclick=function(){var a=d.ka.listDisks;a&&um(d,a.options[a.selectedIndex].text,a.value)},!0;case "saveDrive":if(!this.Y){c.parentNode.removeChild(c);break}this.ka[b]=c;c.onclick=function(){var a=d.ka.listDrives;a&&a.options&&d.B&&(a=ca(a.value,10),(a=d.B[a])?
|
||||
(a=a.ta)?(a=za(pm(a),"octet-stream",!0,a.nh.replace(".json",".img")),n(a)):d.Ba("No diskette loaded in drive."):d.Ba("No diskette drive selected."))};return!0;case "mountDrive":if(!this.Y){c.parentNode.removeChild(c);break}this.ka[b]=c;c.addEventListener("change",function(){var a=c.children[0];a.children[1].disabled=!a.children[0].files.length});c.onsubmit=function(a){if(a=a.currentTarget[1].files[0]){var b=a.name;um(d,fa(b,!0),b,a)}return!1};return!0}return!1};
|
||||
l.pc=function(a,b,c,d){this.ha=b;this.A=c;this.Ia=d;this.ba=a;this.P=kb(a,"ChipSet");if((this.K=jc(this.ba,"autoMount")||this.K)&&"string"==typeof this.K)try{this.K=eval("("+this.K+")")}catch(e){n("FDC auto-mount error: "+e.message+" ("+this.K+")"),this.K=null}vm(this);Nb(b,this,wm);Pb(b,this,xm);ym(this,"None","",!0);this.Y&&ym(this,"Local Disk","?");ym(this,"Remote Disk","??");zm(this)||ab(this)};
|
||||
l.Vb=function(a,b){if(!b){if(!a||!this.restore){if(this.reset(),this.ba.jg){this.C=[];for(var c=0;c<this.B.length;c++)Am(this,c,!0);zm(this,!0)}}else if(!this.restore(a))return!1;if(c=this.ka.listDrives){for(;c.firstChild;)c.removeChild(c.firstChild);c.value="";for(var d=0;d<this.Z;d++){var e=document.createElement("option");e.value=d;e.text=String.fromCharCode(65+d)+":";c.appendChild(e)}0<this.Z&&(c.value="0",tm(this,0))}}return!0};l.Ub=function(a){return a?this.save():!0};l.reset=function(){vm(this)};
|
||||
l.save=function(){var a=new ce(this),b=0,c=[];c[b++]=this.Qa;c[b++]=0;c[b++]=this.aa;c[b++]=this.I;c[b++]=this.G;c[b++]=this.D;c[b++]=this.S;for(var d=b++,e=0,f=[],g=0;g<this.B.length;g++){var h=e++,k=this.B[g],m=0,p=[];p[m++]=k.kb;p[m++]=[k.name,k.ib,k.jb,k.eb,k.nb,k.oe,k.Hf,k.Ue,k.Ve];p[m++]=k.Ya;p[m++]=k.wd+100;p[m++]=k.xb;p[m++]=k.mb;p[m++]=k.xd;p[m++]=k.wb;p[m++]=k.Ua;p[m++]=k.me;p[m++]=k.ij;p[m]=k.Vd;f[h]=p}c[d]=f;d=b++;for(e=0;e<this.B.length;e++)f=this.B[e],f.ta&&Bm(this,f.Vd,f.ta);c[d]=this.C;
|
||||
|
|
|
|||
|
|
@ -459,10 +459,16 @@ FDC.prototype.setBinding = function(sHTMLType, sBinding, control, sValue)
|
|||
aOptions.push(control.options[i]);
|
||||
}
|
||||
aOptions.sort(function(a, b) {
|
||||
/*
|
||||
* I've switched to localeCompare() because it offers case-insensitivity by default;
|
||||
* I'm still a little concerned that we could somehow end up with list elements whose text
|
||||
* and/or value properties are undefined (because calling a method on an undefined variable
|
||||
* will throw an exception), but maybe I'm being overly paranoid....
|
||||
*/
|
||||
if (fdc.sortBy != "path") {
|
||||
return (a.text > b.text)? 1 : ((a.text < b.text)? -1 : 0);
|
||||
return a.text.localeCompare(b.text);
|
||||
} else {
|
||||
return (a.value > b.value)? 1 : ((a.value < b.value)? -1 : 0);
|
||||
return a.value.localeCompare(b.value);
|
||||
}
|
||||
});
|
||||
for (i = 0; i < aOptions.length; i++) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue