[Proto-Scripty] Re: Range utility increment

2009-10-01 Thread Matt Foster

I hadn't thought of that and a good point.

 So if you create a NumberRange of even numbers from 2 to 6 and ask it
 if 3 is included, unless you override that behavior in your
 NumberRange class, `include` will return true.

The range object itself will certainly return true in this scenario.
as it does fall within the beginning and end.  Although in most cases,
and certainly in my example I've wrapped the instance within an
Enumerable ($A) which also has an include method (actually ObjectRange
inherits and overrides this method).. but the Enumerable.include
method is..quoting the API docs based on the == comparison operator
(equality with implicit type conversion) such that, 3 is simply not a
number created by the range, hence not a value in the enumerable.

http://api.prototypejs.org/language/enumerable.html#include-instance_method

--

http://positionabsolute.net


On Sep 28, 7:27 pm, T.J. Crowder t...@crowdersoftware.com wrote:
 Matt,

 The ObjectRange `include` method looks like this:

   function include(value) {
     if (value  this.start)
       return false;
     if (this.exclusive)
       return value  this.end;
     return value = this.end;
   }

 So if you create a NumberRange of even numbers from 2 to 6 and ask it
 if 3 is included, unless you override that behavior in your
 NumberRange class, `include` will return true.

 -- T.J.

 On Sep 28, 9:20 pm, Matt Foster mattfoste...@gmail.com wrote:

  Hey TJ,

  I don't understand, if a NumberRange was given an instance of
  EvenNumber as its start and end parameters, how would it come up with
  the number 3?

  On Sep 26, 7:10 am, T.J. Crowder t...@crowdersoftware.com wrote:

   All right, lads, let's move along...  Each approach has its benefits
   and costs, it all depends on what problem you're solving.

   Matt, FWIW, I think you'd want to override the `include` method as
   well, as others a NumberRange with even numbers would include 3.  At
   that point you're overriding most of ObjectRange, so I'd probably just
   start from Enumerable.  This is not intended as a dig.

   -- T.J.

   On Sep 25, 9:51 pm, Alex McAuley webmas...@thecarmarketplace.com
   wrote:

Omg get over yourself you have taken what i said completely the wrong 
way..

What arrogant plug was that?...

Lets take your code and look at it shall we...

30+ lines for no reason other than Hey look at me, i can write a
function/class in 30 lines that only needs to be 5.

Chill out dude, i wasn't knocking your code, it was just OTT.

You can continue to think you are right which is arrogance in itself...
there is more than one way to skin a cat.

TJ's/My loop that took all of 30 seconds to create is faster no doubt, 
has
less weight and does the job. I personaly have better things to do than
write some amazing class to achieve what can be done in 30 seconds -
evidently you do not so good luck with that.

Alex Mcauleyhttp://www.thevacancymarket.com

- Original Message -
From: Matt Foster mattfoste...@gmail.com
To: Prototype  script.aculo.us 
prototype-scriptaculous@googlegroups.com
Sent: Friday, September 25, 2009 9:16 PM
Subject: [Proto-Scripty] Re: Range utility increment

 That only gives you even or odd increments to the top number...

Incorrect, notice the constructor method? It ensures that the number
given is even such that you'll never get a range of odd numbers.
Granted the last line of the Jojo's question was

 Let's say count up by 2's: [2,4,6,8,10].  How do you do this?

Hence why I went with this specific implementation, to demonstrate how
you can create classes that the ObjectRange class can use to create
proper ranges.  I didn't feel it was necessary to abstract out the
class such that it covers all bases but demonstrate how to do it one
way and then Jojo could modify for their own purposes.

 Better to go with my/TJ's loop

What an arrogant plug of your own spaghetti code and hasty discredit
to my contribution.  Exposing your shortfalls isn't difficult, you
aren't creating a range object, completely bypassing the ObjectRange's
functionality and just simply creating a hacked out array.

So to put the nail in the coffin, here is the classes abstracted out

var IncrementNumber = Class.create({
initialize : function(num, increment){
this.num = num;
this.increment = increment;},

succ : function(){
return this.clone(this.num + this.increment, this.increment);},

clone : function(num, increment){
return new IncrementNumber(num, increment);},

toString : function(){
return this.num;}
});

var EvenNumber = Class.create(IncrementNumber,
{
initialize : function($super, num){
$super(num, 2);
this.num = (num % 2 == 1) ? num - 1 : num;},

clone : function(num, increment){
return new EvenNumber(num);}
});

var NumberRange = Class.create

[Proto-Scripty] Re: Range utility increment

2009-09-28 Thread T.J. Crowder

Matt,

The ObjectRange `include` method looks like this:

  function include(value) {
if (value  this.start)
  return false;
if (this.exclusive)
  return value  this.end;
return value = this.end;
  }

So if you create a NumberRange of even numbers from 2 to 6 and ask it
if 3 is included, unless you override that behavior in your
NumberRange class, `include` will return true.

-- T.J.

On Sep 28, 9:20 pm, Matt Foster mattfoste...@gmail.com wrote:
 Hey TJ,

 I don't understand, if a NumberRange was given an instance of
 EvenNumber as its start and end parameters, how would it come up with
 the number 3?

 On Sep 26, 7:10 am, T.J. Crowder t...@crowdersoftware.com wrote:



  All right, lads, let's move along...  Each approach has its benefits
  and costs, it all depends on what problem you're solving.

  Matt, FWIW, I think you'd want to override the `include` method as
  well, as others a NumberRange with even numbers would include 3.  At
  that point you're overriding most of ObjectRange, so I'd probably just
  start from Enumerable.  This is not intended as a dig.

  -- T.J.

  On Sep 25, 9:51 pm, Alex McAuley webmas...@thecarmarketplace.com
  wrote:

   Omg get over yourself you have taken what i said completely the wrong 
   way..

   What arrogant plug was that?...

   Lets take your code and look at it shall we...

   30+ lines for no reason other than Hey look at me, i can write a
   function/class in 30 lines that only needs to be 5.

   Chill out dude, i wasn't knocking your code, it was just OTT.

   You can continue to think you are right which is arrogance in itself...
   there is more than one way to skin a cat.

   TJ's/My loop that took all of 30 seconds to create is faster no doubt, has
   less weight and does the job. I personaly have better things to do than
   write some amazing class to achieve what can be done in 30 seconds -
   evidently you do not so good luck with that.

   Alex Mcauleyhttp://www.thevacancymarket.com

   - Original Message -
   From: Matt Foster mattfoste...@gmail.com
   To: Prototype  script.aculo.us 
   prototype-scriptaculous@googlegroups.com
   Sent: Friday, September 25, 2009 9:16 PM
   Subject: [Proto-Scripty] Re: Range utility increment

That only gives you even or odd increments to the top number...

   Incorrect, notice the constructor method? It ensures that the number
   given is even such that you'll never get a range of odd numbers.
   Granted the last line of the Jojo's question was

Let's say count up by 2's: [2,4,6,8,10].  How do you do this?

   Hence why I went with this specific implementation, to demonstrate how
   you can create classes that the ObjectRange class can use to create
   proper ranges.  I didn't feel it was necessary to abstract out the
   class such that it covers all bases but demonstrate how to do it one
   way and then Jojo could modify for their own purposes.

Better to go with my/TJ's loop

   What an arrogant plug of your own spaghetti code and hasty discredit
   to my contribution.  Exposing your shortfalls isn't difficult, you
   aren't creating a range object, completely bypassing the ObjectRange's
   functionality and just simply creating a hacked out array.

   So to put the nail in the coffin, here is the classes abstracted out

   var IncrementNumber = Class.create({
   initialize : function(num, increment){
   this.num = num;
   this.increment = increment;},

   succ : function(){
   return this.clone(this.num + this.increment, this.increment);},

   clone : function(num, increment){
   return new IncrementNumber(num, increment);},

   toString : function(){
   return this.num;}
   });

   var EvenNumber = Class.create(IncrementNumber,
   {
   initialize : function($super, num){
   $super(num, 2);
   this.num = (num % 2 == 1) ? num - 1 : num;},

   clone : function(num, increment){
   return new EvenNumber(num);}
   });

   var NumberRange = Class.create(ObjectRange,
   {
   _each: function(iterator) {
   var value = this.start;
   while (this.include(value.num)) {
     iterator(value.num);
     value = value.succ();

   }
   },
   });

   var bottom = new IncrementNumber(-10, 2);
   //var bottom = new EvenNumber(-20);
   var top = new EvenNumber(25);
   var range = $A(new NumberRange(bottom, top));

   console.log(range);

   nothing gets me fired up like a flame...

   On Sep 25, 2:25 pm, Alex McAuley webmas...@thecarmarketplace.com
   wrote:

That only gives you even or odd increments to the top number...

WHat if you wanted every 5th number ...

Better to go with my/TJ's loop

Alex Mcauleyhttp://www.thevacancymarket.com

- Original Message -
From: Matt Foster mattfoste...@gmail.com
To: Prototype  script.aculo.us
prototype-scriptaculous@googlegroups.com
Sent: Friday, September 25, 2009 5:57 PM
Subject: [Proto-Scripty] Re: Range utility increment

I'd just use an 'iterator' class to do this...

var EvenNumber

[Proto-Scripty] Re: Range utility increment

2009-09-26 Thread T.J. Crowder

All right, lads, let's move along...  Each approach has its benefits
and costs, it all depends on what problem you're solving.

Matt, FWIW, I think you'd want to override the `include` method as
well, as others a NumberRange with even numbers would include 3.  At
that point you're overriding most of ObjectRange, so I'd probably just
start from Enumerable.  This is not intended as a dig.

-- T.J.

On Sep 25, 9:51 pm, Alex McAuley webmas...@thecarmarketplace.com
wrote:
 Omg get over yourself you have taken what i said completely the wrong way..

 What arrogant plug was that?...

 Lets take your code and look at it shall we...

 30+ lines for no reason other than Hey look at me, i can write a
 function/class in 30 lines that only needs to be 5.

 Chill out dude, i wasn't knocking your code, it was just OTT.

 You can continue to think you are right which is arrogance in itself...
 there is more than one way to skin a cat.

 TJ's/My loop that took all of 30 seconds to create is faster no doubt, has
 less weight and does the job. I personaly have better things to do than
 write some amazing class to achieve what can be done in 30 seconds -
 evidently you do not so good luck with that.

 Alex Mcauleyhttp://www.thevacancymarket.com

 - Original Message -
 From: Matt Foster mattfoste...@gmail.com
 To: Prototype  script.aculo.us prototype-scriptaculous@googlegroups.com
 Sent: Friday, September 25, 2009 9:16 PM
 Subject: [Proto-Scripty] Re: Range utility increment

  That only gives you even or odd increments to the top number...

 Incorrect, notice the constructor method? It ensures that the number
 given is even such that you'll never get a range of odd numbers.
 Granted the last line of the Jojo's question was

  Let's say count up by 2's: [2,4,6,8,10].  How do you do this?

 Hence why I went with this specific implementation, to demonstrate how
 you can create classes that the ObjectRange class can use to create
 proper ranges.  I didn't feel it was necessary to abstract out the
 class such that it covers all bases but demonstrate how to do it one
 way and then Jojo could modify for their own purposes.

  Better to go with my/TJ's loop

 What an arrogant plug of your own spaghetti code and hasty discredit
 to my contribution.  Exposing your shortfalls isn't difficult, you
 aren't creating a range object, completely bypassing the ObjectRange's
 functionality and just simply creating a hacked out array.

 So to put the nail in the coffin, here is the classes abstracted out

 var IncrementNumber = Class.create({
 initialize : function(num, increment){
 this.num = num;
 this.increment = increment;},

 succ : function(){
 return this.clone(this.num + this.increment, this.increment);},

 clone : function(num, increment){
 return new IncrementNumber(num, increment);},

 toString : function(){
 return this.num;}
 });

 var EvenNumber = Class.create(IncrementNumber,
 {
 initialize : function($super, num){
 $super(num, 2);
 this.num = (num % 2 == 1) ? num - 1 : num;},

 clone : function(num, increment){
 return new EvenNumber(num);}
 });

 var NumberRange = Class.create(ObjectRange,
 {
 _each: function(iterator) {
 var value = this.start;
 while (this.include(value.num)) {
   iterator(value.num);
   value = value.succ();

 }
 },
 });

 var bottom = new IncrementNumber(-10, 2);
 //var bottom = new EvenNumber(-20);
 var top = new EvenNumber(25);
 var range = $A(new NumberRange(bottom, top));

 console.log(range);

 nothing gets me fired up like a flame...

 On Sep 25, 2:25 pm, Alex McAuley webmas...@thecarmarketplace.com
 wrote:



  That only gives you even or odd increments to the top number...

  WHat if you wanted every 5th number ...

  Better to go with my/TJ's loop

  Alex Mcauleyhttp://www.thevacancymarket.com

  - Original Message -
  From: Matt Foster mattfoste...@gmail.com
  To: Prototype  script.aculo.us
  prototype-scriptaculous@googlegroups.com
  Sent: Friday, September 25, 2009 5:57 PM
  Subject: [Proto-Scripty] Re: Range utility increment

  I'd just use an 'iterator' class to do this...

  var EvenNumber = Class.create(
  {
  initialize : function(num){
  this.num = (num % 2 == 1) ? num - 1 : num;
  },
  succ : function(){
  return new EvenNumber(this.num + 2);
  },
  toString : function(){
  return this.num;
  }
  });

  var bottom = new EvenNumber(1);

  var top = new EvenNumber(21);
  var range = $A($R(bottom, top));

  console.log(range);

  I had done this to a much greater extent in my date range selector
  gadget. Where it became the master range, held a range of calendar
  objects, which were in themselves ranges of date objects... fun stuff.

 https://positionabsolute.net/blog/2008/01/google-calendar-date-range-...

  ps just looking over that, should rename that class to
  PositiveEvenNumber, only going to work one way, but you get the idea

  On Sep 25, 4:15 am, Alex McAuley webmas...@thecarmarketplace.com
  wrote:
   function everyOther(start, end, increment) {
   var n;
   var

[Proto-Scripty] Re: Range utility increment

2009-09-25 Thread Alex McAuley

if you want an array then i wluld use push
var twos=new Array();
for(i=0;i=10;++i) {

if(i%2) {
  twos[]=i;
}


}

.
Untested but i cant see why it wouldnt work


Alex Mcauley
http://www.thevacancymarket.com
- Original Message - 
From: JoJo tokyot...@gmail.com
To: Prototype  script.aculo.us prototype-scriptaculous@googlegroups.com
Sent: Thursday, September 24, 2009 11:15 PM
Subject: [Proto-Scripty] Range utility increment



 http://www.prototypejs.org/api/utility/dollar-r

 From the documentation of the Range utility, it seems like it can only
 increment by 1's. For example, $A($R(1,10,true)) gives you:
 [1,2,3,4,5,6,7,8,9,10].

 I'm looking for a way to specify that I want to increment by any
 value. Let's say count up by 2's: [2,4,6,8,10].  How do you do this?
 
 


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Prototype  script.aculo.us group.
To post to this group, send email to prototype-scriptaculous@googlegroups.com
To unsubscribe from this group, send email to 
prototype-scriptaculous+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/prototype-scriptaculous?hl=en
-~--~~~~--~~--~--~---



[Proto-Scripty] Re: Range utility increment

2009-09-25 Thread T.J. Crowder

Hi,

 I'm looking for a way to specify that I want to increment by any
 value. Let's say count up by 2's: [2,4,6,8,10].  How do you do this?

ObjectRange itself is for ranges of consecutive values, but you can
get an array of such values by applying Enumerable#collect to a range:

var twos;
twos = $R(1, 5).collect(function(x) { return x * 2; });

...although frankly I'd probably go with a straight loop like Alex did
(although a slightly different one):

function everyOther(start, end) {
var n;
var rv = [];
for (n = start; n = end; n += 2) {
rv[rv.length] = n;
}
return rv;
}

FWIW,
--
T.J. Crowder
tj / crowder software / com
www.crowdersoftware.com


On Sep 24, 11:15 pm, JoJo tokyot...@gmail.com wrote:
 http://www.prototypejs.org/api/utility/dollar-r

 From the documentation of the Range utility, it seems like it can only
 increment by 1's. For example, $A($R(1,10,true)) gives you:
 [1,2,3,4,5,6,7,8,9,10].

 I'm looking for a way to specify that I want to increment by any
 value. Let's say count up by 2's: [2,4,6,8,10].  How do you do this?
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Prototype  script.aculo.us group.
To post to this group, send email to prototype-scriptaculous@googlegroups.com
To unsubscribe from this group, send email to 
prototype-scriptaculous+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/prototype-scriptaculous?hl=en
-~--~~~~--~~--~--~---



[Proto-Scripty] Re: Range utility increment

2009-09-25 Thread Alex McAuley

function everyOther(start, end, increment) {
var n;
var rv = [];
for (n = start; n = end; n += increment) {
rv[rv.length] = n;
}
return rv;
}



Just a mod to make it better to be able to change it to 3's, 4's, 5's


;)




Alex Mcauley
http://www.thevacancymarket.com
- Original Message - 
From: T.J. Crowder t...@crowdersoftware.com
To: Prototype  script.aculo.us prototype-scriptaculous@googlegroups.com
Sent: Friday, September 25, 2009 8:29 AM
Subject: [Proto-Scripty] Re: Range utility increment



Hi,

 I'm looking for a way to specify that I want to increment by any
 value. Let's say count up by 2's: [2,4,6,8,10].  How do you do this?

ObjectRange itself is for ranges of consecutive values, but you can
get an array of such values by applying Enumerable#collect to a range:

var twos;
twos = $R(1, 5).collect(function(x) { return x * 2; });

...although frankly I'd probably go with a straight loop like Alex did
(although a slightly different one):

function everyOther(start, end) {
var n;
var rv = [];
for (n = start; n = end; n += 2) {
rv[rv.length] = n;
}
return rv;
}

FWIW,
--
T.J. Crowder
tj / crowder software / com
www.crowdersoftware.com


On Sep 24, 11:15 pm, JoJo tokyot...@gmail.com wrote:
 http://www.prototypejs.org/api/utility/dollar-r

 From the documentation of the Range utility, it seems like it can only
 increment by 1's. For example, $A($R(1,10,true)) gives you:
 [1,2,3,4,5,6,7,8,9,10].

 I'm looking for a way to specify that I want to increment by any
 value. Let's say count up by 2's: [2,4,6,8,10]. How do you do this?



--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Prototype  script.aculo.us group.
To post to this group, send email to prototype-scriptaculous@googlegroups.com
To unsubscribe from this group, send email to 
prototype-scriptaculous+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/prototype-scriptaculous?hl=en
-~--~~~~--~~--~--~---



[Proto-Scripty] Re: Range utility increment

2009-09-25 Thread Matt Foster

I'd just use an 'iterator' class to do this...

var EvenNumber = Class.create(
{
initialize : function(num){
this.num = (num % 2 == 1) ? num - 1 : num;
},
succ : function(){
return new EvenNumber(this.num + 2);
},
toString : function(){
return this.num;
}
});

var bottom = new EvenNumber(1);

var top = new EvenNumber(21);
var range = $A($R(bottom, top));

console.log(range);

I had done this to a much greater extent in my date range selector
gadget.  Where it became the master range, held a range of calendar
objects, which were in themselves ranges of date objects... fun stuff.

https://positionabsolute.net/blog/2008/01/google-calendar-date-range-selection.php

ps just looking over that, should rename that class to
PositiveEvenNumber, only going to work one way, but you get the idea


On Sep 25, 4:15 am, Alex McAuley webmas...@thecarmarketplace.com
wrote:
 function everyOther(start, end, increment) {
         var n;
         var rv = [];
         for (n = start; n = end; n += increment) {
             rv[rv.length] = n;
         }
         return rv;
     }

 Just a mod to make it better to be able to change it to 3's, 4's, 5's

 ;)

 Alex Mcauleyhttp://www.thevacancymarket.com

 - Original Message -
 From: T.J. Crowder t...@crowdersoftware.com
 To: Prototype  script.aculo.us prototype-scriptaculous@googlegroups.com
 Sent: Friday, September 25, 2009 8:29 AM
 Subject: [Proto-Scripty] Re: Range utility increment

 Hi,

  I'm looking for a way to specify that I want to increment by any
  value. Let's say count up by 2's: [2,4,6,8,10].  How do you do this?

 ObjectRange itself is for ranges of consecutive values, but you can
 get an array of such values by applying Enumerable#collect to a range:

     var twos;
     twos = $R(1, 5).collect(function(x) { return x * 2; });

 ...although frankly I'd probably go with a straight loop like Alex did
 (although a slightly different one):

     function everyOther(start, end) {
         var n;
         var rv = [];
         for (n = start; n = end; n += 2) {
             rv[rv.length] = n;
         }
         return rv;
     }

 FWIW,
 --
 T.J. Crowder
 tj / crowder software / comwww.crowdersoftware.com

 On Sep 24, 11:15 pm, JoJo tokyot...@gmail.com wrote:
 http://www.prototypejs.org/api/utility/dollar-r

  From the documentation of the Range utility, it seems like it can only
  increment by 1's. For example, $A($R(1,10,true)) gives you:
  [1,2,3,4,5,6,7,8,9,10].

  I'm looking for a way to specify that I want to increment by any
  value. Let's say count up by 2's: [2,4,6,8,10]. How do you do this?
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Prototype  script.aculo.us group.
To post to this group, send email to prototype-scriptaculous@googlegroups.com
To unsubscribe from this group, send email to 
prototype-scriptaculous+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/prototype-scriptaculous?hl=en
-~--~~~~--~~--~--~---



[Proto-Scripty] Re: Range utility increment

2009-09-25 Thread Alex McAuley

That only gives you even or odd increments to the top number...

WHat if you wanted every 5th number ...

Better to go with my/TJ's loop


Alex Mcauley
http://www.thevacancymarket.com
- Original Message - 
From: Matt Foster mattfoste...@gmail.com
To: Prototype  script.aculo.us prototype-scriptaculous@googlegroups.com
Sent: Friday, September 25, 2009 5:57 PM
Subject: [Proto-Scripty] Re: Range utility increment



I'd just use an 'iterator' class to do this...

var EvenNumber = Class.create(
{
initialize : function(num){
this.num = (num % 2 == 1) ? num - 1 : num;
},
succ : function(){
return new EvenNumber(this.num + 2);
},
toString : function(){
return this.num;
}
});

var bottom = new EvenNumber(1);

var top = new EvenNumber(21);
var range = $A($R(bottom, top));

console.log(range);

I had done this to a much greater extent in my date range selector
gadget.  Where it became the master range, held a range of calendar
objects, which were in themselves ranges of date objects... fun stuff.

https://positionabsolute.net/blog/2008/01/google-calendar-date-range-selection.php

ps just looking over that, should rename that class to
PositiveEvenNumber, only going to work one way, but you get the idea


On Sep 25, 4:15 am, Alex McAuley webmas...@thecarmarketplace.com
wrote:
 function everyOther(start, end, increment) {
 var n;
 var rv = [];
 for (n = start; n = end; n += increment) {
 rv[rv.length] = n;
 }
 return rv;
 }

 Just a mod to make it better to be able to change it to 3's, 4's, 5's

 ;)

 Alex Mcauleyhttp://www.thevacancymarket.com

 - Original Message -
 From: T.J. Crowder t...@crowdersoftware.com
 To: Prototype  script.aculo.us 
 prototype-scriptaculous@googlegroups.com
 Sent: Friday, September 25, 2009 8:29 AM
 Subject: [Proto-Scripty] Re: Range utility increment

 Hi,

  I'm looking for a way to specify that I want to increment by any
  value. Let's say count up by 2's: [2,4,6,8,10]. How do you do this?

 ObjectRange itself is for ranges of consecutive values, but you can
 get an array of such values by applying Enumerable#collect to a range:

 var twos;
 twos = $R(1, 5).collect(function(x) { return x * 2; });

 ...although frankly I'd probably go with a straight loop like Alex did
 (although a slightly different one):

 function everyOther(start, end) {
 var n;
 var rv = [];
 for (n = start; n = end; n += 2) {
 rv[rv.length] = n;
 }
 return rv;
 }

 FWIW,
 --
 T.J. Crowder
 tj / crowder software / comwww.crowdersoftware.com

 On Sep 24, 11:15 pm, JoJo tokyot...@gmail.com wrote:
 http://www.prototypejs.org/api/utility/dollar-r

  From the documentation of the Range utility, it seems like it can only
  increment by 1's. For example, $A($R(1,10,true)) gives you:
  [1,2,3,4,5,6,7,8,9,10].

  I'm looking for a way to specify that I want to increment by any
  value. Let's say count up by 2's: [2,4,6,8,10]. How do you do this?



--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Prototype  script.aculo.us group.
To post to this group, send email to prototype-scriptaculous@googlegroups.com
To unsubscribe from this group, send email to 
prototype-scriptaculous+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/prototype-scriptaculous?hl=en
-~--~~~~--~~--~--~---



[Proto-Scripty] Re: Range utility increment

2009-09-25 Thread bernard
so generalize the class...
  - Original Message - 
  From: Alex McAuley 
  To: prototype-scriptaculous@googlegroups.com 
  Sent: Friday, September 25, 2009 12:25 PM
  Subject: [Proto-Scripty] Re: Range utility increment



  That only gives you even or odd increments to the top number...

  WHat if you wanted every 5th number ...

  Better to go with my/TJ's loop


  Alex Mcauley
  http://www.thevacancymarket.com
  - Original Message - 
  From: Matt Foster mattfoste...@gmail.com
  To: Prototype  script.aculo.us prototype-scriptaculous@googlegroups.com
  Sent: Friday, September 25, 2009 5:57 PM
  Subject: [Proto-Scripty] Re: Range utility increment



  I'd just use an 'iterator' class to do this...

  var EvenNumber = Class.create(
  {
  initialize : function(num){
  this.num = (num % 2 == 1) ? num - 1 : num;
  },
  succ : function(){
  return new EvenNumber(this.num + 2);
  },
  toString : function(){
  return this.num;
  }
  });

  var bottom = new EvenNumber(1);

  var top = new EvenNumber(21);
  var range = $A($R(bottom, top));

  console.log(range);

  I had done this to a much greater extent in my date range selector
  gadget.  Where it became the master range, held a range of calendar
  objects, which were in themselves ranges of date objects... fun stuff.

  
https://positionabsolute.net/blog/2008/01/google-calendar-date-range-selection.php

  ps just looking over that, should rename that class to
  PositiveEvenNumber, only going to work one way, but you get the idea


  On Sep 25, 4:15 am, Alex McAuley webmas...@thecarmarketplace.com
  wrote:
   function everyOther(start, end, increment) {
   var n;
   var rv = [];
   for (n = start; n = end; n += increment) {
   rv[rv.length] = n;
   }
   return rv;
   }
  
   Just a mod to make it better to be able to change it to 3's, 4's, 5's
  
   ;)
  
   Alex Mcauleyhttp://www.thevacancymarket.com
  
   - Original Message -
   From: T.J. Crowder t...@crowdersoftware.com
   To: Prototype  script.aculo.us 
   prototype-scriptaculous@googlegroups.com
   Sent: Friday, September 25, 2009 8:29 AM
   Subject: [Proto-Scripty] Re: Range utility increment
  
   Hi,
  
I'm looking for a way to specify that I want to increment by any
value. Let's say count up by 2's: [2,4,6,8,10]. How do you do this?
  
   ObjectRange itself is for ranges of consecutive values, but you can
   get an array of such values by applying Enumerable#collect to a range:
  
   var twos;
   twos = $R(1, 5).collect(function(x) { return x * 2; });
  
   ...although frankly I'd probably go with a straight loop like Alex did
   (although a slightly different one):
  
   function everyOther(start, end) {
   var n;
   var rv = [];
   for (n = start; n = end; n += 2) {
   rv[rv.length] = n;
   }
   return rv;
   }
  
   FWIW,
   --
   T.J. Crowder
   tj / crowder software / comwww.crowdersoftware.com
  
   On Sep 24, 11:15 pm, JoJo tokyot...@gmail.com wrote:
   http://www.prototypejs.org/api/utility/dollar-r
  
From the documentation of the Range utility, it seems like it can only
increment by 1's. For example, $A($R(1,10,true)) gives you:
[1,2,3,4,5,6,7,8,9,10].
  
I'm looking for a way to specify that I want to increment by any
value. Let's say count up by 2's: [2,4,6,8,10]. How do you do this?



  

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Prototype  script.aculo.us group.
To post to this group, send email to prototype-scriptaculous@googlegroups.com
To unsubscribe from this group, send email to 
prototype-scriptaculous+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/prototype-scriptaculous?hl=en
-~--~~~~--~~--~--~---



[Proto-Scripty] Re: Range utility increment

2009-09-25 Thread Matt Foster

 That only gives you even or odd increments to the top number...

Incorrect, notice the constructor method? It ensures that the number
given is even such that you'll never get a range of odd numbers.
Granted the last line of the Jojo's question was

 Let's say count up by 2's: [2,4,6,8,10].  How do you do this?

Hence why I went with this specific implementation, to demonstrate how
you can create classes that the ObjectRange class can use to create
proper ranges.  I didn't feel it was necessary to abstract out the
class such that it covers all bases but demonstrate how to do it one
way and then Jojo could modify for their own purposes.

 Better to go with my/TJ's loop

What an arrogant plug of your own spaghetti code and hasty discredit
to my contribution.  Exposing your shortfalls isn't difficult, you
aren't creating a range object, completely bypassing the ObjectRange's
functionality and just simply creating a hacked out array.

So to put the nail in the coffin, here is the classes abstracted out

var IncrementNumber = Class.create({
initialize : function(num, increment){
this.num = num;
this.increment = increment;
},
succ : function(){
return this.clone(this.num + this.increment, 
this.increment);
},
clone : function(num, increment){
return new IncrementNumber(num, increment);
},
toString : function(){
return this.num;
}
});
var EvenNumber = Class.create(IncrementNumber,
{
initialize : function($super, num){
$super(num, 2);
this.num = (num % 2 == 1) ? num - 1 : num;
},
clone : function(num, increment){
return new EvenNumber(num);
}
});
var NumberRange = Class.create(ObjectRange,
{
_each: function(iterator) {
var value = this.start;
while (this.include(value.num)) {
  iterator(value.num);
  value = value.succ();
}
},

});
var bottom = new IncrementNumber(-10, 2);
//var bottom = new EvenNumber(-20);
var top = new EvenNumber(25);
var range = $A(new NumberRange(bottom, top));

console.log(range);

nothing gets me fired up like a flame...









On Sep 25, 2:25 pm, Alex McAuley webmas...@thecarmarketplace.com
wrote:
 That only gives you even or odd increments to the top number...

 WHat if you wanted every 5th number ...

 Better to go with my/TJ's loop

 Alex Mcauleyhttp://www.thevacancymarket.com

 - Original Message -
 From: Matt Foster mattfoste...@gmail.com
 To: Prototype  script.aculo.us prototype-scriptaculous@googlegroups.com
 Sent: Friday, September 25, 2009 5:57 PM
 Subject: [Proto-Scripty] Re: Range utility increment

 I'd just use an 'iterator' class to do this...

 var EvenNumber = Class.create(
 {
 initialize : function(num){
 this.num = (num % 2 == 1) ? num - 1 : num;
 },
 succ : function(){
 return new EvenNumber(this.num + 2);
 },
 toString : function(){
 return this.num;
 }
 });

 var bottom = new EvenNumber(1);

 var top = new EvenNumber(21);
 var range = $A($R(bottom, top));

 console.log(range);

 I had done this to a much greater extent in my date range selector
 gadget.  Where it became the master range, held a range of calendar
 objects, which were in themselves ranges of date objects... fun stuff.

 https://positionabsolute.net/blog/2008/01/google-calendar-date-range-...

 ps just looking over that, should rename that class to
 PositiveEvenNumber, only going to work one way, but you get the idea

 On Sep 25, 4:15 am, Alex McAuley webmas...@thecarmarketplace.com
 wrote:
  function everyOther(start, end, increment) {
  var n;
  var rv = [];
  for (n = start; n = end; n += increment) {
  rv[rv.length] = n;
  }
  return rv;
  }

  Just a mod to make it better to be able to change it to 3's, 4's, 5's

  ;)

  Alex Mcauleyhttp://www.thevacancymarket.com

  - Original Message -
  From: T.J. Crowder t...@crowdersoftware.com
  To: Prototype  script.aculo.us
  prototype-scriptaculous@googlegroups.com
  Sent: Friday, September 25, 2009 8:29 AM
  Subject: [Proto-Scripty] Re: Range utility increment

  Hi,

   I'm looking for a way to specify that I want to increment by any
   value. Let's say count up by 2's: [2,4,6,8,10]. How do you do this?

  ObjectRange itself is for ranges of consecutive values, but you can
  get an array of such values by applying Enumerable#collect to a range:

  var twos;
  twos = $R(1, 5).collect(function(x) { return x * 2; });

  ...although frankly I'd probably go with a straight loop like Alex did
  (although a slightly different one):

  function everyOther(start, end) {
  var n;
  var rv = [];
  for (n = start; n = end; n += 2) {
  rv

[Proto-Scripty] Re: Range utility increment

2009-09-25 Thread Alex McAuley

Omg get over yourself you have taken what i said completely the wrong way..

What arrogant plug was that?...

Lets take your code and look at it shall we...

30+ lines for no reason other than Hey look at me, i can write a 
function/class in 30 lines that only needs to be 5.

Chill out dude, i wasn't knocking your code, it was just OTT.

You can continue to think you are right which is arrogance in itself... 
there is more than one way to skin a cat.

TJ's/My loop that took all of 30 seconds to create is faster no doubt, has 
less weight and does the job. I personaly have better things to do than 
write some amazing class to achieve what can be done in 30 seconds - 
evidently you do not so good luck with that.



Alex Mcauley
http://www.thevacancymarket.com


- Original Message - 
From: Matt Foster mattfoste...@gmail.com
To: Prototype  script.aculo.us prototype-scriptaculous@googlegroups.com
Sent: Friday, September 25, 2009 9:16 PM
Subject: [Proto-Scripty] Re: Range utility increment



 That only gives you even or odd increments to the top number...

Incorrect, notice the constructor method? It ensures that the number
given is even such that you'll never get a range of odd numbers.
Granted the last line of the Jojo's question was

 Let's say count up by 2's: [2,4,6,8,10].  How do you do this?

Hence why I went with this specific implementation, to demonstrate how
you can create classes that the ObjectRange class can use to create
proper ranges.  I didn't feel it was necessary to abstract out the
class such that it covers all bases but demonstrate how to do it one
way and then Jojo could modify for their own purposes.

 Better to go with my/TJ's loop

What an arrogant plug of your own spaghetti code and hasty discredit
to my contribution.  Exposing your shortfalls isn't difficult, you
aren't creating a range object, completely bypassing the ObjectRange's
functionality and just simply creating a hacked out array.

So to put the nail in the coffin, here is the classes abstracted out

var IncrementNumber = Class.create({
initialize : function(num, increment){
this.num = num;
this.increment = increment;
},
succ : function(){
return this.clone(this.num + this.increment, this.increment);
},
clone : function(num, increment){
return new IncrementNumber(num, increment);
},
toString : function(){
return this.num;
}
});
var EvenNumber = Class.create(IncrementNumber,
{
initialize : function($super, num){
$super(num, 2);
this.num = (num % 2 == 1) ? num - 1 : num;
},
clone : function(num, increment){
return new EvenNumber(num);
}
});
var NumberRange = Class.create(ObjectRange,
{
_each: function(iterator) {
var value = this.start;
while (this.include(value.num)) {
  iterator(value.num);
  value = value.succ();
}
},

});
var bottom = new IncrementNumber(-10, 2);
//var bottom = new EvenNumber(-20);
var top = new EvenNumber(25);
var range = $A(new NumberRange(bottom, top));

console.log(range);

nothing gets me fired up like a flame...









On Sep 25, 2:25 pm, Alex McAuley webmas...@thecarmarketplace.com
wrote:
 That only gives you even or odd increments to the top number...

 WHat if you wanted every 5th number ...

 Better to go with my/TJ's loop

 Alex Mcauleyhttp://www.thevacancymarket.com

 - Original Message -
 From: Matt Foster mattfoste...@gmail.com
 To: Prototype  script.aculo.us 
 prototype-scriptaculous@googlegroups.com
 Sent: Friday, September 25, 2009 5:57 PM
 Subject: [Proto-Scripty] Re: Range utility increment

 I'd just use an 'iterator' class to do this...

 var EvenNumber = Class.create(
 {
 initialize : function(num){
 this.num = (num % 2 == 1) ? num - 1 : num;
 },
 succ : function(){
 return new EvenNumber(this.num + 2);
 },
 toString : function(){
 return this.num;
 }
 });

 var bottom = new EvenNumber(1);

 var top = new EvenNumber(21);
 var range = $A($R(bottom, top));

 console.log(range);

 I had done this to a much greater extent in my date range selector
 gadget. Where it became the master range, held a range of calendar
 objects, which were in themselves ranges of date objects... fun stuff.

 https://positionabsolute.net/blog/2008/01/google-calendar-date-range-...

 ps just looking over that, should rename that class to
 PositiveEvenNumber, only going to work one way, but you get the idea

 On Sep 25, 4:15 am, Alex McAuley webmas...@thecarmarketplace.com
 wrote:
  function everyOther(start, end, increment) {
  var n;
  var rv = [];
  for (n = start; n = end; n += increment) {
  rv[rv.length] = n;
  }
  return rv;
  }

  Just a mod to make it better to be able to change it to 3's, 4's, 5's

  ;)

  Alex Mcauleyhttp://www.thevacancymarket.com

  - Original Message -
  From: T.J. Crowder t...@crowdersoftware.com
  To: Prototype  script.aculo.us
  prototype-scriptaculous@googlegroups.com
  Sent: Friday, September 25, 2009 8:29 AM
  Subject: [Proto-Scripty] Re: Range utility increment

  Hi,

   I'm looking for a way to specify that I want to increment by any
   value