|
|
|
@ -1,4 +1,6 @@
|
|
|
|
|
/* TIMELINE NAVIGATION |
|
|
|
|
/* TimeNav |
|
|
|
|
This class handles the bottom timeline navigation. |
|
|
|
|
It requires the VMM.Util class and VMM.Date class |
|
|
|
|
================================================== */ |
|
|
|
|
|
|
|
|
|
if(typeof VMM.Timeline != 'undefined' && typeof VMM.Timeline.TimeNav == 'undefined') { |
|
|
|
@ -453,7 +455,9 @@ if(typeof VMM.Timeline != 'undefined' && typeof VMM.Timeline.TimeNav == 'undefin
|
|
|
|
|
return _time; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* POSITION |
|
|
|
|
/* POSITION |
|
|
|
|
Positions elements on the timeline based on date |
|
|
|
|
relative to the calculated interval |
|
|
|
|
================================================== */ |
|
|
|
|
var positionRelative = function(_interval, first, last) { |
|
|
|
|
var _first, |
|
|
|
@ -714,9 +718,9 @@ if(typeof VMM.Timeline != 'undefined' && typeof VMM.Timeline.TimeNav == 'undefin
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for(var i = 0; i < the_intervals.length; i++) { |
|
|
|
|
var _interval = the_intervals[i].interval_element, |
|
|
|
|
_interval_date = the_intervals[i].interval_date, |
|
|
|
|
_interval_visible = the_intervals[i].interval_visible, |
|
|
|
|
var _interval = the_intervals[i].element, |
|
|
|
|
_interval_date = the_intervals[i].date, |
|
|
|
|
_interval_visible = the_intervals[i].visible, |
|
|
|
|
_pos = positionOnTimeline(interval, the_intervals[i].relative_pos), |
|
|
|
|
pos = _pos.begin, |
|
|
|
|
_animation = the_intervals[i].animation, |
|
|
|
@ -835,150 +839,206 @@ if(typeof VMM.Timeline != 'undefined' && typeof VMM.Timeline.TimeNav == 'undefin
|
|
|
|
|
*/ |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* Interval Elements |
|
|
|
|
================================================== */ |
|
|
|
|
var createIntervalElements = function(_interval, _array, _element_parent) { |
|
|
|
|
|
|
|
|
|
var inc_time = 0, |
|
|
|
|
_first_run = true, |
|
|
|
|
_last_pos = 0, |
|
|
|
|
_largest_pos = 0; |
|
|
|
|
var inc_time = 0, |
|
|
|
|
_first_run = true, |
|
|
|
|
_last_pos = 0, |
|
|
|
|
_largest_pos = 0, |
|
|
|
|
_timezone_offset, |
|
|
|
|
_first_date, |
|
|
|
|
firefox = { |
|
|
|
|
flag: false, |
|
|
|
|
offset: 0 |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
VMM.attachElement(_element_parent, ""); |
|
|
|
|
|
|
|
|
|
_interval.date = new Date(data[0].startdate.getFullYear(), 0, 1, 0,0,0); |
|
|
|
|
|
|
|
|
|
for(var i = 0; i < Math.ceil(_interval.number) + 1; i++) { |
|
|
|
|
var _idd, |
|
|
|
|
_pos, |
|
|
|
|
pos, |
|
|
|
|
_date, |
|
|
|
|
_visible = false, |
|
|
|
|
_relative_pos, |
|
|
|
|
_element = VMM.appendAndGetElement(_element_parent, "<div>", _interval.classname); |
|
|
|
|
_timezone_offset = _interval.date.getTimezoneOffset(); |
|
|
|
|
|
|
|
|
|
for(var i = 0; i < Math.ceil(_interval.number) + 2; i++) { |
|
|
|
|
var _is_year = false, |
|
|
|
|
int_obj = { |
|
|
|
|
element: VMM.appendAndGetElement(_element_parent, "<div>", _interval.classname), |
|
|
|
|
date: new Date(data[0].startdate.getFullYear(), 0, 1, 0,0,0), |
|
|
|
|
visible: false, |
|
|
|
|
date_string: "", |
|
|
|
|
type: _interval.interval_type, |
|
|
|
|
relative_pos: 0, |
|
|
|
|
is_detached: false, |
|
|
|
|
animation: { |
|
|
|
|
animate: false, |
|
|
|
|
pos: "", |
|
|
|
|
opacity: "100" |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
//int_obj.date.setFullYear( data[0].startdate.getFullYear() );
|
|
|
|
|
//int_obj.date.setMonth( data[0].startdate.getMonth() );
|
|
|
|
|
//int_obj.date.setDate( data[0].startdate.getDate() );
|
|
|
|
|
//int_obj.date.setHours( data[0].startdate.getHours() );
|
|
|
|
|
//int_obj.date.setMinutes( data[0].startdate.getMinutes() );
|
|
|
|
|
//int_obj.date.setSeconds( data[0].startdate.getSeconds() );
|
|
|
|
|
//int_obj.date.setMilliseconds(0);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (_interval.type == "eon") { |
|
|
|
|
if (_first_run) { |
|
|
|
|
_interval.date.setFullYear( Math.floor(data[0].startdate.getFullYear() / 500000000) * 500000000 ); |
|
|
|
|
_first_date = Math.floor(data[0].startdate.getFullYear() / 500000000) * 500000000; |
|
|
|
|
} |
|
|
|
|
_interval.date.setFullYear(_interval.date.getFullYear() + (inc_time * 500000000)); |
|
|
|
|
int_obj.date.setFullYear(_first_date + (inc_time * 500000000)); |
|
|
|
|
_is_year = true; |
|
|
|
|
} else if (_interval.type == "era") { |
|
|
|
|
if (_first_run) { |
|
|
|
|
_interval.date.setFullYear( Math.floor(data[0].startdate.getFullYear() / 100000000) * 100000000 ); |
|
|
|
|
_first_date = Math.floor(data[0].startdate.getFullYear() / 100000000) * 100000000; |
|
|
|
|
} |
|
|
|
|
_interval.date.setFullYear(_interval.date.getFullYear() + (inc_time * 100000000)); |
|
|
|
|
int_obj.date.setFullYear(_first_date + (inc_time * 100000000)); |
|
|
|
|
_is_year = true; |
|
|
|
|
} else if (_interval.type == "epoch") { |
|
|
|
|
if (_first_run) { |
|
|
|
|
_interval.date.setFullYear( Math.floor(data[0].startdate.getFullYear() / 10000000) * 10000000 ); |
|
|
|
|
_first_date = Math.floor(data[0].startdate.getFullYear() / 10000000) * 10000000 |
|
|
|
|
} |
|
|
|
|
_interval.date.setFullYear(_interval.date.getFullYear() + (inc_time * 10000000)); |
|
|
|
|
int_obj.date.setFullYear(_first_date + (inc_time * 10000000)); |
|
|
|
|
_is_year = true; |
|
|
|
|
} else if (_interval.type == "age") { |
|
|
|
|
if (_first_run) { |
|
|
|
|
_interval.date.setFullYear( Math.floor(data[0].startdate.getFullYear() / 1000000) * 1000000 ); |
|
|
|
|
_first_date = Math.floor(data[0].startdate.getFullYear() / 1000000) * 1000000 |
|
|
|
|
} |
|
|
|
|
_interval.date.setFullYear(_interval.date.getFullYear() + (inc_time * 1000000)); |
|
|
|
|
int_obj.date.setFullYear(_first_date + (inc_time * 1000000)); |
|
|
|
|
_is_year = true; |
|
|
|
|
} else if (_interval.type == "millenium") { |
|
|
|
|
if (_first_run) { |
|
|
|
|
_interval.date.setFullYear( Math.floor(data[0].startdate.getFullYear() / 1000) * 1000 ); |
|
|
|
|
_first_date = Math.floor(data[0].startdate.getFullYear() / 1000) * 1000; |
|
|
|
|
} |
|
|
|
|
_interval.date.setFullYear(_interval.date.getFullYear() + (inc_time * 1000)); |
|
|
|
|
int_obj.date.setFullYear(_first_date + (inc_time * 1000)); |
|
|
|
|
_is_year = true; |
|
|
|
|
} else if (_interval.type == "century") { |
|
|
|
|
if (_first_run) { |
|
|
|
|
_interval.date.setFullYear( Math.floor(data[0].startdate.getFullYear() / 100) * 100 ); |
|
|
|
|
_first_date = Math.floor(data[0].startdate.getFullYear() / 100) * 100 |
|
|
|
|
} |
|
|
|
|
_interval.date.setFullYear(_interval.date.getFullYear() + (inc_time * 100)); |
|
|
|
|
int_obj.date.setFullYear(_first_date + (inc_time * 100)); |
|
|
|
|
_is_year = true; |
|
|
|
|
} else if (_interval.type == "decade") { |
|
|
|
|
if (_first_run) { |
|
|
|
|
_interval.date.setFullYear( Math.floor(data[0].startdate.getFullYear() / 10) * 10 ); |
|
|
|
|
_first_date = Math.floor(data[0].startdate.getFullYear() / 10) * 10; |
|
|
|
|
} |
|
|
|
|
_interval.date.setFullYear(_interval.date.getFullYear() + (inc_time * 10)); |
|
|
|
|
int_obj.date.setFullYear(_first_date + (inc_time * 10)); |
|
|
|
|
_is_year = true; |
|
|
|
|
} else if (interval.type == "year") { |
|
|
|
|
if (_first_run) { |
|
|
|
|
|
|
|
|
|
_first_date = data[0].startdate.getFullYear(); |
|
|
|
|
} |
|
|
|
|
_interval.date.setFullYear(_interval.date.getFullYear() + inc_time); |
|
|
|
|
int_obj.date.setFullYear(_first_date + inc_time); |
|
|
|
|
_is_year = true; |
|
|
|
|
} else if (_interval.type == "month") { |
|
|
|
|
if (_first_run) { |
|
|
|
|
_interval.date.setMonth(data[0].startdate.getMonth()); |
|
|
|
|
_first_date = data[0].startdate.getMonth(); |
|
|
|
|
} |
|
|
|
|
_interval.date.setMonth(_interval.date.getMonth() + inc_time); |
|
|
|
|
int_obj.date.setMonth(_first_date + inc_time); |
|
|
|
|
} else if (_interval.type == "week") { |
|
|
|
|
if (_first_run) { |
|
|
|
|
_interval.date.setMonth( data[0].startdate.getMonth() ); |
|
|
|
|
_interval.date.setDate( Math.floor(data[0].startdate.getDate() *7) ); |
|
|
|
|
_first_date = data[0].startdate.getMonth(); |
|
|
|
|
} |
|
|
|
|
_interval.date.setDate(_interval.date.getDate() + (inc_time * 7) ); |
|
|
|
|
int_obj.date.setMonth(data[0].startdate.getMonth()); |
|
|
|
|
int_obj.date.setDate(_first_date + (inc_time * 7) ); |
|
|
|
|
} else if (_interval.type == "day") { |
|
|
|
|
if (_first_run) { |
|
|
|
|
_interval.date.setMonth( data[0].startdate.getMonth() ); |
|
|
|
|
_interval.date.setDate( data[0].startdate.getDate() ); |
|
|
|
|
_first_date = data[0].startdate.getDate(); |
|
|
|
|
} |
|
|
|
|
_interval.date.setDate(_interval.date.getDate() + inc_time); |
|
|
|
|
int_obj.date.setMonth(data[0].startdate.getMonth()); |
|
|
|
|
int_obj.date.setDate(_first_date + inc_time); |
|
|
|
|
} else if (_interval.type == "hour") { |
|
|
|
|
if (_first_run) { |
|
|
|
|
_interval.date.setMonth( data[0].startdate.getMonth() ); |
|
|
|
|
_interval.date.setDate( data[0].startdate.getDate() ); |
|
|
|
|
_interval.date.setHours( data[0].startdate.getHours() ); |
|
|
|
|
_first_date = data[0].startdate.getHours(); |
|
|
|
|
} |
|
|
|
|
_interval.date.setHours(_interval.date.getHours() + inc_time); |
|
|
|
|
int_obj.date.setMonth(data[0].startdate.getMonth()); |
|
|
|
|
int_obj.date.setDate(data[0].startdate.getDate()); |
|
|
|
|
int_obj.date.setHours(_first_date + inc_time); |
|
|
|
|
} else if (_interval.type == "minute") { |
|
|
|
|
if (_first_run) { |
|
|
|
|
_interval.date.setMonth( data[0].startdate.getMonth() ); |
|
|
|
|
_interval.date.setDate( data[0].startdate.getDate() ); |
|
|
|
|
_interval.date.setHours( data[0].startdate.getHours() ); |
|
|
|
|
_interval.date.setMinutes( data[0].startdate.getMinutes() ); |
|
|
|
|
_first_date = data[0].startdate.getMinutes(); |
|
|
|
|
} |
|
|
|
|
_interval.date.setMinutes(_interval.date.getMinutes() + inc_time); |
|
|
|
|
int_obj.date.setMonth(data[0].startdate.getMonth()); |
|
|
|
|
int_obj.date.setDate(data[0].startdate.getDate()); |
|
|
|
|
int_obj.date.setHours(data[0].startdate.getHours()); |
|
|
|
|
int_obj.date.setMinutes(_first_date + inc_time); |
|
|
|
|
} else if (_interval.type == "second") { |
|
|
|
|
if (_first_run) { |
|
|
|
|
_interval.date.setMonth( data[0].startdate.getMonth() ); |
|
|
|
|
_interval.date.setDate( data[0].startdate.getDate() ); |
|
|
|
|
_interval.date.setHours( data[0].startdate.getHours() ); |
|
|
|
|
_interval.date.setMinutes( data[0].startdate.getMinutes() ); |
|
|
|
|
_interval.date.setSeconds( data[0].startdate.getSeconds() ); |
|
|
|
|
_first_date = data[0].startdate.getSeconds(); |
|
|
|
|
} |
|
|
|
|
_interval.date.setSeconds(_interval.date.getSeconds() + inc_time); |
|
|
|
|
int_obj.date.setMonth(data[0].startdate.getMonth()); |
|
|
|
|
int_obj.date.setDate(data[0].startdate.getDate()); |
|
|
|
|
int_obj.date.setHours(data[0].startdate.getHours()); |
|
|
|
|
int_obj.date.setMinutes(data[0].startdate.getMinutes()); |
|
|
|
|
int_obj.date.setSeconds(_first_date + inc_time); |
|
|
|
|
} else if (_interval.type == "millisecond") { |
|
|
|
|
if (_first_run) { |
|
|
|
|
_first_date = data[0].startdate.getMilliseconds(); |
|
|
|
|
} |
|
|
|
|
int_obj.date.setMonth(data[0].startdate.getMonth()); |
|
|
|
|
int_obj.date.setDate(data[0].startdate.getDate()); |
|
|
|
|
int_obj.date.setHours(data[0].startdate.getHours()); |
|
|
|
|
int_obj.date.setMinutes(data[0].startdate.getMinutes()); |
|
|
|
|
int_obj.date.setSeconds(data[0].startdate.getSeconds()); |
|
|
|
|
int_obj.date.setMilliseconds(_first_date + inc_time); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
_idd = VMM.Date.prettyDate(_interval.date, true); |
|
|
|
|
|
|
|
|
|
inc_time = 1; |
|
|
|
|
|
|
|
|
|
_first_run = false; |
|
|
|
|
|
|
|
|
|
_relative_pos = positionRelative(interval, _interval.date); |
|
|
|
|
// FIX WEIRD FIREFOX BUG FOR GMT TIME FORMATTING
|
|
|
|
|
if (VMM.Browser.browser == "Firefox") { |
|
|
|
|
if (int_obj.date.getFullYear() == "1970" && int_obj.date.getTimezoneOffset() != _timezone_offset) { |
|
|
|
|
|
|
|
|
|
trace("FIREFOX 1970 TIMEZONE OFFSET " + int_obj.date.getTimezoneOffset() + " SHOULD BE " + _timezone_offset); |
|
|
|
|
trace(_interval.type + " " + _interval.date); |
|
|
|
|
|
|
|
|
|
// try and fix firefox bug, if not the flag will catch it
|
|
|
|
|
firefox.offset = (int_obj.date.getTimezoneOffset()/60); |
|
|
|
|
firefox.flag = true; |
|
|
|
|
int_obj.date.setHours(int_obj.date.getHours() + firefox.offset ); |
|
|
|
|
|
|
|
|
|
} else if (firefox.flag) { |
|
|
|
|
// catch the bug the second time around
|
|
|
|
|
firefox.flag = false; |
|
|
|
|
int_obj.date.setHours(int_obj.date.getHours() + firefox.offset ); |
|
|
|
|
if (_is_year) { |
|
|
|
|
firefox.flag = true; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//_pos = positionOnTimeline(_interval, _interval.date);
|
|
|
|
|
//pos = _pos.begin;
|
|
|
|
|
pos = _relative_pos.begin; |
|
|
|
|
if (_is_year) { |
|
|
|
|
if ( int_obj.date.getFullYear() < 0 ) { |
|
|
|
|
int_obj.date_string = Math.abs( int_obj.date.getFullYear() ).toString() + " B.C."; |
|
|
|
|
} else { |
|
|
|
|
int_obj.date_string = int_obj.date.getFullYear(); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
int_obj.date_string = VMM.Date.prettyDate(int_obj.date, true); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
VMM.appendElement(_element, _idd); |
|
|
|
|
// Increment Time
|
|
|
|
|
inc_time++; |
|
|
|
|
|
|
|
|
|
VMM.Lib.css(_element, "text-indent", -(VMM.Lib.width(_element)/2)); |
|
|
|
|
VMM.Lib.css(_element, "opacity", "0"); |
|
|
|
|
|
|
|
|
|
_last_pos = pos; |
|
|
|
|
// No longer first run
|
|
|
|
|
_first_run = false; |
|
|
|
|
|
|
|
|
|
if (pos > _largest_pos) { |
|
|
|
|
_largest_pos = pos; |
|
|
|
|
int_obj.relative_pos = positionRelative(interval, int_obj.date); |
|
|
|
|
_last_pos = int_obj.relative_pos.begin; |
|
|
|
|
if (int_obj.relative_pos.begin > _largest_pos) { |
|
|
|
|
_largest_pos = int_obj.relative_pos.begin; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
_date = new Date(_interval.date); |
|
|
|
|
|
|
|
|
|
var _obj = { |
|
|
|
|
interval_element: _element, |
|
|
|
|
interval_date: _date, |
|
|
|
|
interval_visible: _visible,
|
|
|
|
|
type: _interval.interval_type, |
|
|
|
|
relative_pos: _relative_pos, |
|
|
|
|
is_detached: false, |
|
|
|
|
animation: { |
|
|
|
|
animate: false, |
|
|
|
|
pos: "", |
|
|
|
|
opacity: "100" |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
// Add the time string to the element and position it.
|
|
|
|
|
VMM.appendElement(int_obj.element, int_obj.date_string); |
|
|
|
|
VMM.Lib.css(int_obj.element, "text-indent", -(VMM.Lib.width(int_obj.element)/2)); |
|
|
|
|
VMM.Lib.css(int_obj.element, "opacity", "0"); |
|
|
|
|
|
|
|
|
|
_array.push(_obj); |
|
|
|
|
// add the interval element to the array
|
|
|
|
|
_array.push(int_obj); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
VMM.Lib.width($timeintervalminor_minor, _largest_pos); |
|
|
|
|