Hi,
Just thought I'd share this lovely bit code from CalendarLayout. Anyway want to
have a go at rewriting it so that's its human readable?
I particular like:
- How it possible to get a value of s1 (eg 10) that's not in the switch
statement.
- There's a check for !startDate first but the check for !endDate is last
- Comparisons use a mixture of < and <= and > and >=
There's a bug here - karma points for anyone who can work it out.
mx_internal function removeRangeFromSelection(startDate:Date, endDate:Date):void
{
for (var n:int = 0; n < selectedRangeCount; n++)
{
var s1:int;
if (!startDate || startDate <= _selectedRanges[n].rangeStart)
s1 = 1;
else if (startDate <= _selectedRanges[n].rangeEnd)
s1 = 2;
else if (startDate > _selectedRanges[n].rangeEnd)
s1 = 3;
if (endDate < _selectedRanges[n].rangeStart)
s1 *= 5;
else if (endDate < _selectedRanges[n].rangeEnd)
s1 *= 7;
else if (!endDate || endDate >= _selectedRanges[n].rangeEnd)
s1 *= 11;
switch (s1)
{
case 5:
case 33:
break;
case 14:
{
var temp:Date = _selectedRanges[n].rangeEnd;
_selectedRanges[n].rangeEnd = incrementDate(startDate,-1);
_selectedRanges[selectedRangeCount] = {};
_selectedRanges[selectedRangeCount].rangeStart =
incrementDate(endDate);
_selectedRanges[selectedRangeCount].rangeEnd = temp;
selectedRangeCount += 1;
break;
}
case 7:
{
_selectedRanges[n].rangeStart = incrementDate(endDate);
break;
}
case 22:
{
_selectedRanges[n].rangeEnd = incrementDate(startDate,-1);
break;
}
case 11:
{
_selectedRanges[n] = _selectedRanges[selectedRangeCount-1];
_selectedRanges[selectedRangeCount-1] = null;
selectedRangeCount -= 1;
break;
}
}
}
}
Thanks,
Justin