|
|
- /**
- * Created by Alex on 10/3/2014.
- */
- var moment = require('../module/moment');
-
-
- exports.convertHiddenOptions = function(timeline) {
- var hiddenTimes = timeline.options.hide;
- if (Array.isArray(hiddenTimes) == true) {
- for (var i = 0; i < hiddenTimes.length; i++) {
- var dateItem = {};
- dateItem.start = moment(hiddenTimes[i].start).toDate().valueOf();
- dateItem.end = moment(hiddenTimes[i].end).toDate().valueOf();
- timeline.body.hiddenDates.push(dateItem);
- }
- timeline.body.hiddenDates.sort(function(a,b) {return a.start - b.start;}); // sort by start time
- }
- else {
- timeline.body.hiddenDates = [{
- start:moment(hiddenTimes.start).toDate().valueOf(),
- end:moment(hiddenTimes.end).toDate().valueOf()
- }
- ];
- }
- }
-
- exports.stepOverHiddenDates = function(timeStep, previousTime) {
- var stepInHidden = false;
- var currentValue = timeStep.current.valueOf();
- for (var i = 0; i < timeStep.hiddenDates.length; i++) {
- var startDate = timeStep.hiddenDates[i].start;
- var endDate = timeStep.hiddenDates[i].end;
- if (currentValue >= startDate && currentValue < endDate) {
- stepInHidden = true;
- break;
- }
- }
-
- if (stepInHidden == true && currentValue < timeStep._end.valueOf() && currentValue != previousTime) {
- timeStep.current = moment(endDate).toDate();
- }
- }
-
- exports.toScreen = function(timeline, time, width) {
- var hidden = exports.isHidden(time, timeline.body.hiddenDates)
- if (hidden.hidden == true) {
- time = hidden.startDate;
- }
-
- var res = exports.correctTimeForDuration(timeline.body.hiddenDates, timeline.range, time);
- var duration = res.duration;
- time = res.time;
-
- var conversion = timeline.range.conversion(width, duration);
- return (time.valueOf() - conversion.offset) * conversion.scale;
- }
-
- exports.toTime = function(body, range, x, width) {
- var duration = exports.getHiddenDuration(body.hiddenDates, range);
-
- var conversion = range.conversion(width, duration);
- var time = new Date(x / conversion.scale + conversion.offset);
-
- //var hidden = exports.isHidden(time, timeline.body.hiddenDates)
- //if (hidden.hidden == true) {
- // time = hidden.startDate;
- //}
- //time = exports.correctTimeForDuration(body.hiddenDates, range, time).time;
- return time;
- }
-
-
- exports.getHiddenDuration = function(hiddenTimes, range) {
- var duration = 0;
- for (var i = 0; i < hiddenTimes.length; i++) {
- var startDate = hiddenTimes[i].start;
- var endDate = hiddenTimes[i].end;
- // if time after the cutout, and the
- if (startDate >= range.start && endDate < range.end) {
- duration += endDate - startDate;
- }
- }
- return duration;
- }
-
-
- exports.correctTimeForDuration = function(hiddenTimes, range, time) {
- var duration = 0;
- var timeOffset = 0;
- time = moment(time).toDate().valueOf()
-
- for (var i = 0; i < hiddenTimes.length; i++) {
- var startDate = hiddenTimes[i].start;
- var endDate = hiddenTimes[i].end;
- // if time after the cutout, and the
- if (startDate >= range.start && endDate < range.end) {
- duration += (endDate - startDate);
- if (time >= endDate) {
- timeOffset += (endDate - startDate);
- }
- }
- }
- time -= timeOffset;
- return {duration: duration, time:time, offset: timeOffset};
- }
-
-
-
-
-
- exports.snapAwayFromHidden = function(hiddenTimes, range, start, end, delta, zoom) {
- zoom = zoom || false;
- var newStart = start;
- var newEnd = end;
- for (var i = 0; i < hiddenTimes.length; i++) {
- var startDate = hiddenTimes[i].start;
- var endDate = hiddenTimes[i].end;
- if (start >= startDate && start < endDate) { // if the start is entering a hidden zone
- range.deltaDifference += delta;
- if (range.previousDelta - delta > 0 && zoom == false || zoom == true && range.previousDelta - delta < 0) { // from the left
- console.log("start from left, snap to right")
- newStart = endDate + 1;
- }
- else { // from the right
- console.log("start from right, snap to left")
- newStart = startDate - 1;
- }
- return {newStart: newStart, newEnd: newEnd};
- }
- else if (end >= startDate && end < endDate) { // if the start is entering a hidden zone
- range.deltaDifference += delta;
- if (range.previousDelta - delta < 0) { // from the right
- console.log("end from right, snap to left")
- newEnd = startDate - 1;
-
- }
- else { // from the left
- console.log("end from left, snap to right")
- newEnd = endDate + 1;
- }
- return {newStart: newStart, newEnd: newEnd};
- }
- }
- return false;
- }
-
- exports.isHidden = function(time, hiddenTimes) {
- var isHidden = false;
- for (var i = 0; i < hiddenTimes.length; i++) {
- var startDate = hiddenTimes[i].start;
- var endDate = hiddenTimes[i].end;
-
- if (time >= startDate && time < endDate) { // if the start is entering a hidden zone
- isHidden = true;
- break;
- }
- }
- return {hidden: isHidden, startDate: startDate, endDate: endDate};
- }
|