[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 [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
-~----------~----~----~----~------~----~------~--~---