141 lines
3.8 KiB
JavaScript
141 lines
3.8 KiB
JavaScript
|
|
|
|
function transformThisPoint(point, container) {
|
|
|
|
/* We make the point relative to the current frame */
|
|
|
|
point = container.frame.frameThisPoint(point);
|
|
|
|
/* We add the possible displacement */
|
|
|
|
point = container.displacement.displaceThisPoint(point);
|
|
|
|
/* We viewport Transformation. */
|
|
|
|
point = viewPort.zoomThisPoint(point);
|
|
|
|
return point;
|
|
}
|
|
|
|
function unTransformThisPoint(point, container) {
|
|
|
|
point = viewPort.unzoomThisPoint(point);
|
|
point = container.displacement.undisplaceThisPoint(point);
|
|
point = container.frame.unframeThisPoint(point);
|
|
|
|
return point;
|
|
}
|
|
|
|
function nextPorwerOf10(number) {
|
|
|
|
for (let i = -10; i <= 10; i++) {
|
|
if (number < Math.pow(10, i)) {
|
|
return Math.pow(10, i);
|
|
}
|
|
}
|
|
}
|
|
|
|
function pad(str, max) {
|
|
str = str.toString();
|
|
return str.length < max ? pad("0" + str, max) : str;
|
|
}
|
|
|
|
function getDateFromPoint(point, container, timeLineCoordinateSystem) {
|
|
|
|
point = unTransformThisPoint(point, container);
|
|
point = timeLineCoordinateSystem.unInverseTransform(point, container.frame.height);
|
|
|
|
let date = new Date(point.x);
|
|
|
|
return date;
|
|
}
|
|
|
|
function getRateFromPoint(point, container, timeLineCoordinateSystem) {
|
|
|
|
point = unTransformThisPoint(point, container);
|
|
point = timeLineCoordinateSystem.unInverseTransform(point, container.frame.height);
|
|
|
|
return point.y;
|
|
}
|
|
|
|
function getMilisecondsFromPoint(point, container, timeLineCoordinateSystem) {
|
|
|
|
point = unTransformThisPoint(point, container);
|
|
point = timeLineCoordinateSystem.unInverseTransform(point, container.frame.height);
|
|
|
|
return point.x;
|
|
}
|
|
|
|
function saveUserPosition(container, timeLineCoordinateSystem) {
|
|
|
|
let centerPoint = {
|
|
x: (viewPort.visibleArea.bottomRight.x - viewPort.visibleArea.topLeft.x) / 2,
|
|
y: (viewPort.visibleArea.bottomRight.y - viewPort.visibleArea.topLeft.y) / 2
|
|
};
|
|
|
|
let userPosition = {
|
|
date: getDateFromPoint(centerPoint, container, timeLineCoordinateSystem),
|
|
rate: getRateFromPoint(centerPoint, container, timeLineCoordinateSystem),
|
|
market: DEFAULT_MARKET,
|
|
zoom: viewPort.zoomTargetLevel
|
|
};
|
|
|
|
window.localStorage.setItem('userPosition', JSON.stringify(userPosition));
|
|
}
|
|
|
|
function moveToUserPosition(container, timeLineCoordinateSystem) {
|
|
|
|
let savedPosition = window.localStorage.getItem('userPosition');
|
|
let userPosition;
|
|
|
|
if (savedPosition === null) {
|
|
|
|
userPosition = {
|
|
date: (new Date()).toString(),
|
|
rate: timeLineCoordinateSystem.max.y / 2,
|
|
market: DEFAULT_MARKET,
|
|
zoom: INITIAL_ZOOM_LEVEL
|
|
};
|
|
|
|
} else {
|
|
|
|
userPosition = JSON.parse(savedPosition);
|
|
}
|
|
|
|
let centerPoint = {
|
|
x: (viewPort.visibleArea.bottomRight.x - viewPort.visibleArea.topLeft.x) / 2,
|
|
y: (viewPort.visibleArea.bottomRight.y - viewPort.visibleArea.topLeft.y) / 2
|
|
};
|
|
|
|
viewPort.newZoomLevel(userPosition.zoom);
|
|
INITIAL_TIME_PERIOD = recalculatePeriod(userPosition.zoom);
|
|
INITIAL_DATE = new Date (userPosition.date);
|
|
|
|
let targetPoint = {
|
|
x: (new Date(userPosition.date)).valueOf(),
|
|
y: userPosition.rate
|
|
};
|
|
|
|
/* Put this point in the coordinate system of the viewPort */
|
|
|
|
targetPoint = timeLineCoordinateSystem.transformThisPoint(targetPoint);
|
|
targetPoint = transformThisPoint(targetPoint, container);
|
|
|
|
/* Lets calculate the displace vector, from the point we want at the center, to the current center. */
|
|
|
|
let displaceVector = {
|
|
x: centerPoint.x - targetPoint.x,
|
|
y: centerPoint.y - targetPoint.y
|
|
};
|
|
|
|
viewPort.displace(displaceVector);
|
|
}
|
|
|
|
function removeTime(datetime) {
|
|
|
|
if (datetime === undefined) { return;}
|
|
|
|
let dateOnly = new Date(Math.trunc(datetime.valueOf() / ONE_DAY_IN_MILISECONDS) * ONE_DAY_IN_MILISECONDS);
|
|
|
|
return dateOnly;
|
|
} |