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 [email protected]
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
-~----------~----~----~----~------~----~------~--~---