Browse Source

Test with scale name instead of enum

v3_develop
jos 10 years ago
parent
commit
d58fdc1f9a
1 changed files with 106 additions and 127 deletions
  1. +106
    -127
      lib/timeline/TimeStep.js

+ 106
- 127
lib/timeline/TimeStep.js View File

@ -34,7 +34,7 @@ function TimeStep(start, end, minimumStep, hiddenDates) {
this._end = new Date();
this.autoScale = true;
this.scale = TimeStep.SCALE.DAY;
this.scale = 'day';
this.step = 1;
// initialize the range
@ -50,25 +50,6 @@ function TimeStep(start, end, minimumStep, hiddenDates) {
}
}
// enum scale
TimeStep.SCALE = {
MILLISECOND: 1,
SECOND: 2,
MINUTE: 3,
HOUR: 4,
DAY: 5,
WEEKDAY: 6,
MONTH: 7,
YEAR: 8
};
// array with lower case scale names
TimeStep.SCALE_INDEX = {};
Object.keys(TimeStep.SCALE).forEach(function (key) {
var index = TimeStep.SCALE[key];
TimeStep.SCALE_INDEX[index] = key.toLowerCase();
});
// Time formatting
TimeStep.FORMAT = {
minorLabels: {
@ -133,29 +114,29 @@ TimeStep.prototype.roundToMinor = function() {
// IMPORTANT: we have no breaks in this switch! (this is no bug)
//noinspection FallthroughInSwitchStatementJS
switch (this.scale) {
case TimeStep.SCALE.YEAR:
case 'year':
this.current.setFullYear(this.step * Math.floor(this.current.getFullYear() / this.step));
this.current.setMonth(0);
case TimeStep.SCALE.MONTH: this.current.setDate(1);
case TimeStep.SCALE.DAY: // intentional fall through
case TimeStep.SCALE.WEEKDAY: this.current.setHours(0);
case TimeStep.SCALE.HOUR: this.current.setMinutes(0);
case TimeStep.SCALE.MINUTE: this.current.setSeconds(0);
case TimeStep.SCALE.SECOND: this.current.setMilliseconds(0);
//case TimeStep.SCALE.MILLISECOND: // nothing to do for milliseconds
case 'month': this.current.setDate(1);
case 'day': // intentional fall through
case 'weekday': this.current.setHours(0);
case 'hour': this.current.setMinutes(0);
case 'minute': this.current.setSeconds(0);
case 'second': this.current.setMilliseconds(0);
//case 'millisecond': // nothing to do for milliseconds
}
if (this.step != 1) {
// round down to the first minor value that is a multiple of the current step size
switch (this.scale) {
case TimeStep.SCALE.MILLISECOND: this.current.setMilliseconds(this.current.getMilliseconds() - this.current.getMilliseconds() % this.step); break;
case TimeStep.SCALE.SECOND: this.current.setSeconds(this.current.getSeconds() - this.current.getSeconds() % this.step); break;
case TimeStep.SCALE.MINUTE: this.current.setMinutes(this.current.getMinutes() - this.current.getMinutes() % this.step); break;
case TimeStep.SCALE.HOUR: this.current.setHours(this.current.getHours() - this.current.getHours() % this.step); break;
case TimeStep.SCALE.WEEKDAY: // intentional fall through
case TimeStep.SCALE.DAY: this.current.setDate((this.current.getDate()-1) - (this.current.getDate()-1) % this.step + 1); break;
case TimeStep.SCALE.MONTH: this.current.setMonth(this.current.getMonth() - this.current.getMonth() % this.step); break;
case TimeStep.SCALE.YEAR: this.current.setFullYear(this.current.getFullYear() - this.current.getFullYear() % this.step); break;
case 'millisecond': this.current.setMilliseconds(this.current.getMilliseconds() - this.current.getMilliseconds() % this.step); break;
case 'second': this.current.setSeconds(this.current.getSeconds() - this.current.getSeconds() % this.step); break;
case 'minute': this.current.setMinutes(this.current.getMinutes() - this.current.getMinutes() % this.step); break;
case 'hour': this.current.setHours(this.current.getHours() - this.current.getHours() % this.step); break;
case 'weekday': // intentional fall through
case 'day': this.current.setDate((this.current.getDate()-1) - (this.current.getDate()-1) % this.step + 1); break;
case 'month': this.current.setMonth(this.current.getMonth() - this.current.getMonth() % this.step); break;
case 'year': this.current.setFullYear(this.current.getFullYear() - this.current.getFullYear() % this.step); break;
default: break;
}
}
@ -179,34 +160,34 @@ TimeStep.prototype.next = function() {
// (end of March and end of October)
if (this.current.getMonth() < 6) {
switch (this.scale) {
case TimeStep.SCALE.MILLISECOND:
case 'millisecond':
this.current = new Date(this.current.valueOf() + this.step); break;
case TimeStep.SCALE.SECOND: this.current = new Date(this.current.valueOf() + this.step * 1000); break;
case TimeStep.SCALE.MINUTE: this.current = new Date(this.current.valueOf() + this.step * 1000 * 60); break;
case TimeStep.SCALE.HOUR:
case 'second': this.current = new Date(this.current.valueOf() + this.step * 1000); break;
case 'minute': this.current = new Date(this.current.valueOf() + this.step * 1000 * 60); break;
case 'hour':
this.current = new Date(this.current.valueOf() + this.step * 1000 * 60 * 60);
// in case of skipping an hour for daylight savings, adjust the hour again (else you get: 0h 5h 9h ... instead of 0h 4h 8h ...)
var h = this.current.getHours();
this.current.setHours(h - (h % this.step));
break;
case TimeStep.SCALE.WEEKDAY: // intentional fall through
case TimeStep.SCALE.DAY: this.current.setDate(this.current.getDate() + this.step); break;
case TimeStep.SCALE.MONTH: this.current.setMonth(this.current.getMonth() + this.step); break;
case TimeStep.SCALE.YEAR: this.current.setFullYear(this.current.getFullYear() + this.step); break;
case 'weekday': // intentional fall through
case 'day': this.current.setDate(this.current.getDate() + this.step); break;
case 'month': this.current.setMonth(this.current.getMonth() + this.step); break;
case 'year': this.current.setFullYear(this.current.getFullYear() + this.step); break;
default: break;
}
}
else {
switch (this.scale) {
case TimeStep.SCALE.MILLISECOND: this.current = new Date(this.current.valueOf() + this.step); break;
case TimeStep.SCALE.SECOND: this.current.setSeconds(this.current.getSeconds() + this.step); break;
case TimeStep.SCALE.MINUTE: this.current.setMinutes(this.current.getMinutes() + this.step); break;
case TimeStep.SCALE.HOUR: this.current.setHours(this.current.getHours() + this.step); break;
case TimeStep.SCALE.WEEKDAY: // intentional fall through
case TimeStep.SCALE.DAY: this.current.setDate(this.current.getDate() + this.step); break;
case TimeStep.SCALE.MONTH: this.current.setMonth(this.current.getMonth() + this.step); break;
case TimeStep.SCALE.YEAR: this.current.setFullYear(this.current.getFullYear() + this.step); break;
case 'millisecond': this.current = new Date(this.current.valueOf() + this.step); break;
case 'second': this.current.setSeconds(this.current.getSeconds() + this.step); break;
case 'minute': this.current.setMinutes(this.current.getMinutes() + this.step); break;
case 'hour': this.current.setHours(this.current.getHours() + this.step); break;
case 'weekday': // intentional fall through
case 'day': this.current.setDate(this.current.getDate() + this.step); break;
case 'month': this.current.setMonth(this.current.getMonth() + this.step); break;
case 'year': this.current.setFullYear(this.current.getFullYear() + this.step); break;
default: break;
}
}
@ -214,14 +195,14 @@ TimeStep.prototype.next = function() {
if (this.step != 1) {
// round down to the correct major value
switch (this.scale) {
case TimeStep.SCALE.MILLISECOND: if(this.current.getMilliseconds() < this.step) this.current.setMilliseconds(0); break;
case TimeStep.SCALE.SECOND: if(this.current.getSeconds() < this.step) this.current.setSeconds(0); break;
case TimeStep.SCALE.MINUTE: if(this.current.getMinutes() < this.step) this.current.setMinutes(0); break;
case TimeStep.SCALE.HOUR: if(this.current.getHours() < this.step) this.current.setHours(0); break;
case TimeStep.SCALE.WEEKDAY: // intentional fall through
case TimeStep.SCALE.DAY: if(this.current.getDate() < this.step+1) this.current.setDate(1); break;
case TimeStep.SCALE.MONTH: if(this.current.getMonth() < this.step) this.current.setMonth(0); break;
case TimeStep.SCALE.YEAR: break; // nothing to do for year
case 'millisecond': if(this.current.getMilliseconds() < this.step) this.current.setMilliseconds(0); break;
case 'second': if(this.current.getSeconds() < this.step) this.current.setSeconds(0); break;
case 'minute': if(this.current.getMinutes() < this.step) this.current.setMinutes(0); break;
case 'hour': if(this.current.getHours() < this.step) this.current.setHours(0); break;
case 'weekday': // intentional fall through
case 'day': if(this.current.getDate() < this.step+1) this.current.setDate(1); break;
case 'month': if(this.current.getMonth() < this.step) this.current.setMonth(0); break;
case 'year': break; // nothing to do for year
default: break;
}
}
@ -295,35 +276,35 @@ TimeStep.prototype.setMinimumStep = function(minimumStep) {
var stepMillisecond= (1);
// find the smallest step that is larger than the provided minimumStep
if (stepYear*1000 > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 1000;}
if (stepYear*500 > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 500;}
if (stepYear*100 > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 100;}
if (stepYear*50 > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 50;}
if (stepYear*10 > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 10;}
if (stepYear*5 > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 5;}
if (stepYear > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 1;}
if (stepMonth*3 > minimumStep) {this.scale = TimeStep.SCALE.MONTH; this.step = 3;}
if (stepMonth > minimumStep) {this.scale = TimeStep.SCALE.MONTH; this.step = 1;}
if (stepDay*5 > minimumStep) {this.scale = TimeStep.SCALE.DAY; this.step = 5;}
if (stepDay*2 > minimumStep) {this.scale = TimeStep.SCALE.DAY; this.step = 2;}
if (stepDay > minimumStep) {this.scale = TimeStep.SCALE.DAY; this.step = 1;}
if (stepDay/2 > minimumStep) {this.scale = TimeStep.SCALE.WEEKDAY; this.step = 1;}
if (stepHour*4 > minimumStep) {this.scale = TimeStep.SCALE.HOUR; this.step = 4;}
if (stepHour > minimumStep) {this.scale = TimeStep.SCALE.HOUR; this.step = 1;}
if (stepMinute*15 > minimumStep) {this.scale = TimeStep.SCALE.MINUTE; this.step = 15;}
if (stepMinute*10 > minimumStep) {this.scale = TimeStep.SCALE.MINUTE; this.step = 10;}
if (stepMinute*5 > minimumStep) {this.scale = TimeStep.SCALE.MINUTE; this.step = 5;}
if (stepMinute > minimumStep) {this.scale = TimeStep.SCALE.MINUTE; this.step = 1;}
if (stepSecond*15 > minimumStep) {this.scale = TimeStep.SCALE.SECOND; this.step = 15;}
if (stepSecond*10 > minimumStep) {this.scale = TimeStep.SCALE.SECOND; this.step = 10;}
if (stepSecond*5 > minimumStep) {this.scale = TimeStep.SCALE.SECOND; this.step = 5;}
if (stepSecond > minimumStep) {this.scale = TimeStep.SCALE.SECOND; this.step = 1;}
if (stepMillisecond*200 > minimumStep) {this.scale = TimeStep.SCALE.MILLISECOND; this.step = 200;}
if (stepMillisecond*100 > minimumStep) {this.scale = TimeStep.SCALE.MILLISECOND; this.step = 100;}
if (stepMillisecond*50 > minimumStep) {this.scale = TimeStep.SCALE.MILLISECOND; this.step = 50;}
if (stepMillisecond*10 > minimumStep) {this.scale = TimeStep.SCALE.MILLISECOND; this.step = 10;}
if (stepMillisecond*5 > minimumStep) {this.scale = TimeStep.SCALE.MILLISECOND; this.step = 5;}
if (stepMillisecond > minimumStep) {this.scale = TimeStep.SCALE.MILLISECOND; this.step = 1;}
if (stepYear*1000 > minimumStep) {this.scale = 'year'; this.step = 1000;}
if (stepYear*500 > minimumStep) {this.scale = 'year'; this.step = 500;}
if (stepYear*100 > minimumStep) {this.scale = 'year'; this.step = 100;}
if (stepYear*50 > minimumStep) {this.scale = 'year'; this.step = 50;}
if (stepYear*10 > minimumStep) {this.scale = 'year'; this.step = 10;}
if (stepYear*5 > minimumStep) {this.scale = 'year'; this.step = 5;}
if (stepYear > minimumStep) {this.scale = 'year'; this.step = 1;}
if (stepMonth*3 > minimumStep) {this.scale = 'month'; this.step = 3;}
if (stepMonth > minimumStep) {this.scale = 'month'; this.step = 1;}
if (stepDay*5 > minimumStep) {this.scale = 'day'; this.step = 5;}
if (stepDay*2 > minimumStep) {this.scale = 'day'; this.step = 2;}
if (stepDay > minimumStep) {this.scale = 'day'; this.step = 1;}
if (stepDay/2 > minimumStep) {this.scale = 'weekday'; this.step = 1;}
if (stepHour*4 > minimumStep) {this.scale = 'hour'; this.step = 4;}
if (stepHour > minimumStep) {this.scale = 'hour'; this.step = 1;}
if (stepMinute*15 > minimumStep) {this.scale = 'minute'; this.step = 15;}
if (stepMinute*10 > minimumStep) {this.scale = 'minute'; this.step = 10;}
if (stepMinute*5 > minimumStep) {this.scale = 'minute'; this.step = 5;}
if (stepMinute > minimumStep) {this.scale = 'minute'; this.step = 1;}
if (stepSecond*15 > minimumStep) {this.scale = 'second'; this.step = 15;}
if (stepSecond*10 > minimumStep) {this.scale = 'second'; this.step = 10;}
if (stepSecond*5 > minimumStep) {this.scale = 'second'; this.step = 5;}
if (stepSecond > minimumStep) {this.scale = 'second'; this.step = 1;}
if (stepMillisecond*200 > minimumStep) {this.scale = 'millisecond'; this.step = 200;}
if (stepMillisecond*100 > minimumStep) {this.scale = 'millisecond'; this.step = 100;}
if (stepMillisecond*50 > minimumStep) {this.scale = 'millisecond'; this.step = 50;}
if (stepMillisecond*10 > minimumStep) {this.scale = 'millisecond'; this.step = 10;}
if (stepMillisecond*5 > minimumStep) {this.scale = 'millisecond'; this.step = 5;}
if (stepMillisecond > minimumStep) {this.scale = 'millisecond'; this.step = 1;}
};
/**
@ -335,7 +316,7 @@ TimeStep.prototype.setMinimumStep = function(minimumStep) {
TimeStep.prototype.snap = function(date) {
var clone = new Date(date.valueOf());
if (this.scale == TimeStep.SCALE.YEAR) {
if (this.scale == 'year') {
var year = clone.getFullYear() + Math.round(clone.getMonth() / 12);
clone.setFullYear(Math.round(year / this.step) * this.step);
clone.setMonth(0);
@ -345,7 +326,7 @@ TimeStep.prototype.snap = function(date) {
clone.setSeconds(0);
clone.setMilliseconds(0);
}
else if (this.scale == TimeStep.SCALE.MONTH) {
else if (this.scale == 'month') {
if (clone.getDate() > 15) {
clone.setDate(1);
clone.setMonth(clone.getMonth() + 1);
@ -360,7 +341,7 @@ TimeStep.prototype.snap = function(date) {
clone.setSeconds(0);
clone.setMilliseconds(0);
}
else if (this.scale == TimeStep.SCALE.DAY) {
else if (this.scale == 'day') {
//noinspection FallthroughInSwitchStatementJS
switch (this.step) {
case 5:
@ -373,7 +354,7 @@ TimeStep.prototype.snap = function(date) {
clone.setSeconds(0);
clone.setMilliseconds(0);
}
else if (this.scale == TimeStep.SCALE.WEEKDAY) {
else if (this.scale == 'weekday') {
//noinspection FallthroughInSwitchStatementJS
switch (this.step) {
case 5:
@ -386,7 +367,7 @@ TimeStep.prototype.snap = function(date) {
clone.setSeconds(0);
clone.setMilliseconds(0);
}
else if (this.scale == TimeStep.SCALE.HOUR) {
else if (this.scale == 'hour') {
switch (this.step) {
case 4:
clone.setMinutes(Math.round(clone.getMinutes() / 60) * 60); break;
@ -395,7 +376,7 @@ TimeStep.prototype.snap = function(date) {
}
clone.setSeconds(0);
clone.setMilliseconds(0);
} else if (this.scale == TimeStep.SCALE.MINUTE) {
} else if (this.scale == 'minute') {
//noinspection FallthroughInSwitchStatementJS
switch (this.step) {
case 15:
@ -410,7 +391,7 @@ TimeStep.prototype.snap = function(date) {
}
clone.setMilliseconds(0);
}
else if (this.scale == TimeStep.SCALE.SECOND) {
else if (this.scale == 'second') {
//noinspection FallthroughInSwitchStatementJS
switch (this.step) {
case 15:
@ -424,7 +405,7 @@ TimeStep.prototype.snap = function(date) {
clone.setMilliseconds(Math.round(clone.getMilliseconds() / 500) * 500); break;
}
}
else if (this.scale == TimeStep.SCALE.MILLISECOND) {
else if (this.scale == 'millisecond') {
var step = this.step > 5 ? this.step / 2 : 1;
clone.setMilliseconds(Math.round(clone.getMilliseconds() / step) * step);
}
@ -441,14 +422,14 @@ TimeStep.prototype.isMajor = function() {
if (this.switchedYear == true) {
this.switchedYear = false;
switch (this.scale) {
case TimeStep.SCALE.YEAR:
case TimeStep.SCALE.MONTH:
case TimeStep.SCALE.WEEKDAY:
case TimeStep.SCALE.DAY:
case TimeStep.SCALE.HOUR:
case TimeStep.SCALE.MINUTE:
case TimeStep.SCALE.SECOND:
case TimeStep.SCALE.MILLISECOND:
case 'year':
case 'month':
case 'weekday':
case 'day':
case 'hour':
case 'minute':
case 'second':
case 'millisecond':
return true;
default:
return false;
@ -457,12 +438,12 @@ TimeStep.prototype.isMajor = function() {
else if (this.switchedMonth == true) {
this.switchedMonth = false;
switch (this.scale) {
case TimeStep.SCALE.WEEKDAY:
case TimeStep.SCALE.DAY:
case TimeStep.SCALE.HOUR:
case TimeStep.SCALE.MINUTE:
case TimeStep.SCALE.SECOND:
case TimeStep.SCALE.MILLISECOND:
case 'weekday':
case 'day':
case 'hour':
case 'minute':
case 'second':
case 'millisecond':
return true;
default:
return false;
@ -471,10 +452,10 @@ TimeStep.prototype.isMajor = function() {
else if (this.switchedDay == true) {
this.switchedDay = false;
switch (this.scale) {
case TimeStep.SCALE.MILLISECOND:
case TimeStep.SCALE.SECOND:
case TimeStep.SCALE.MINUTE:
case TimeStep.SCALE.HOUR:
case 'millisecond':
case 'second':
case 'minute':
case 'hour':
return true;
default:
return false;
@ -482,20 +463,20 @@ TimeStep.prototype.isMajor = function() {
}
switch (this.scale) {
case TimeStep.SCALE.MILLISECOND:
case 'millisecond':
return (this.current.getMilliseconds() == 0);
case TimeStep.SCALE.SECOND:
case 'second':
return (this.current.getSeconds() == 0);
case TimeStep.SCALE.MINUTE:
case 'minute':
return (this.current.getHours() == 0) && (this.current.getMinutes() == 0);
case TimeStep.SCALE.HOUR:
case 'hour':
return (this.current.getHours() == 0);
case TimeStep.SCALE.WEEKDAY: // intentional fall through
case TimeStep.SCALE.DAY:
case 'weekday': // intentional fall through
case 'day':
return (this.current.getDate() == 1);
case TimeStep.SCALE.MONTH:
case 'month':
return (this.current.getMonth() == 0);
case TimeStep.SCALE.YEAR:
case 'year':
return false;
default:
return false;
@ -514,8 +495,7 @@ TimeStep.prototype.getLabelMinor = function(date) {
date = this.current;
}
var scaleName = TimeStep.SCALE_INDEX[this.scale];
var format = TimeStep.FORMAT.minorLabels[scaleName];
var format = TimeStep.FORMAT.minorLabels[this.scale];
return (format && format.length > 0) ? moment(date).format(format) : '';
};
@ -530,8 +510,7 @@ TimeStep.prototype.getLabelMajor = function(date) {
date = this.current;
}
var scaleName = TimeStep.SCALE_INDEX[this.scale];
var format = TimeStep.FORMAT.majorLabels[scaleName];
var format = TimeStep.FORMAT.majorLabels[this.scale];
return (format && format.length > 0) ? moment(date).format(format) : '';
};

Loading…
Cancel
Save