[corrections] 1) var stages = { 's' : 9, // stable 'r' : 8, // release candidate 'g' : 3, // gamma 'b' : 2, // beta 'a' : 1 // alpha };
2) var vers = vstr === String(vstr) ? vstr : ''; 1) the function shouldn't return 0 unless the string passed to it can't be parsed 2) originally wrote it as part of an object with a version key. - Jon L. On Feb 23, 10:11 pm, "Jon L." <[EMAIL PROTECTED]> wrote: > Wrote a stand-alone function for calculating the signature of a > version string. > Works from 0 to 99.99.99.99_S99, where _ is any/no filler and S is > 'a', 'b', 'g', 'r', or 'rc' [case-insensitive]. > > Tested it in both IE7 and FF2 (I don't have any others installed, > atm). > > I'm sure it could use some revamping; so, let me know what you think. > > Current test results: > 900 : 0 > 0 : 0a > 900 : 0h > 201 : 0.0.0.0_g1 > 99999999900 : 99.99.99.99 > 99999999899 : 99.99.99.99_RC99 > > 1050000900 : 1.5.0 > 1050100801 : 1.5.1_rc1 > 1050100802 : 1.5.1_rc2 > 1050100803 : 1.5.1_rc3 > 1050100804 : 1.5.1_rc4 > 1050100900 : 1.5.1 > 1050101900 : 1.5.1.1 > 1050102900 : 1.5.1.2 > 1060000800 : 1.6.0_rc0 > 1060000801 : 1.6.0_rc1 > 1060000900 : 1.6.0 > 1060001900 : 1.6.0.1 > 1060002900 : 1.6.0.2 > > var Version = { > signature : function (vstr) { > // VVvvRRrrSss or VVvvRRBBSss > // or: version, sub-version, release, revision or build, stage, > stage number > > var stages = { > 's' : 9, // stable > 'r' : 8, // release candidate > 'g' : 2, // gamma > 'b' : 1, // beta > 'a' : 0 // alpha > }; > var sig = 0; > var vers = vstr === String(vstr) ? vstr : this.version; > var vnum, rnum = /^\s*[0-9\.]+/; // version number > var vstg, rstg = /(r(c)?|g|b|a)[0-9]*\s*$/i; // version stage > var vsch, vsnm; // version stage > character and number > var vspl; // version number > split > > if (!!vers.match(rnum)) { > vnum = vers.match(rnum)[0]; > vstg = !!vers.match(rstg) ? vers.match(rstg)[0] : ''; > vsch = !vstg.match(/^[a-z]+/i) ? 's' : vstg.match(/^[a-z]+/i) > [0].charAt(0).toLowerCase(); > vsnm = !vstg.match(/[0-9]+$/) ? '0' : vstg.match(/[0-9]+$/); > > vspl = vnum.split('.').slice(0, 4); > vspl = vspl.concat([0, 0, 0, 0].splice(0, (4 - vspl.length))); > > sig += (parseInt(vspl[0], 10) % 100) * Math.pow(10, 9); > sig += (parseInt(vspl[1], 10) % 100) * Math.pow(10, 7); > sig += (parseInt(vspl[2], 10) % 100) * Math.pow(10, 5); > sig += (parseInt(vspl[3], 10) % 100) * Math.pow(10, 3); > sig += (!!stages[vsch] ? stages[vsch] : 0) * 100; > sig += parseInt(vsnm, 10) % 100; > } > > return sig; > } > > }; > > - Jon L. > > On Feb 11, 7:41 pm, "Jon L." <[EMAIL PROTECTED]> wrote: > > > An alternative could be to use the release date: > > > var Prototype = { > > Version: '1.6.0.2', > > Release: '01/25/2008' > > ... > > > }; > > > if(Date(Prototype.Release) >= Date('11/07/2007')) { // 1.6.0 (November > > 7, 2007) > > ... > > > } > > > On Feb 11, 6:55 pm, tancurrom <[EMAIL PROTECTED]> wrote: > > > > Build: '5234724' > > > Be cautious with the use of strings. > > e.g. Prototype.Build >= '6102' returns false ('5' < '6'). > > > - Jon L. > > > On Feb 11, 6:55 pm, tancurrom <[EMAIL PROTECTED]> wrote: > > > > I think using a build number is considerably easier to manipulate in > > > the code. Its considerably more specific that a version number. > > > But include both > > > > var Prototype = { > > > Build: '5234724', > > > Version: '1.6.0.3', > > > ... > > > > or > > > > var Prototype = { > > > Build: '5234724', // v1.6.0.3 > > > ... > > > > I can actually think when I'm going to need to call the > > > Prototype.Version for my code. Let the librarys match it easier. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Prototype: Core" group. To post to this group, send email to prototype-core@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/prototype-core?hl=en -~----------~----~----~----~------~----~------~--~---